犀牛书和红宝书中都没有对作用域的概念进行解释。对作用域的概念有些模糊。
在 汤姆大叔 的博客中解释了 变量对象
的含义,是JavaScript用来保存变量和函数的一个机制,文中说:
在具体实现层面(以及规范中)变量对象只是一个
抽象概念
。
而在这篇文章中,却说:
变量对象成为“作用域”这个
抽象概念的实体
。
另外,在segmentfault用户学习笔记中看到这样的理解:
我的理解是,作用域链是由一个一个变量对象链接起来的一个链,整个作用域链构成了当前执行环境中变量和函数可访问的范围,即
作用域
。
请问大家:
作用域到底指的是什么?和变量对象的关系是什么?
变量对象与作用域,到底谁是谁的抽象概念?谁是具体实现?
谢谢回答。
所以说啊……没有基础就开始看这些非常理论非常形式化的东西很容易把人搞晕……我不是贬低楼主,楼主有求知欲是好事情,也没有囫囵吞枣的接受他人的说法,这点挺好的,只是没有必要在这些文章上花太多时间。
也并不是说写那些文章的人写的不对,而是他们看待问题的角度并不一样,并且穿插了很多自己的想象。
他们设法不牵扯到具体实现,而是从纯粹抽象的语言层面来解释这个问题,自然就变得有点五花八门,看的人有点摸不着头脑。
这个东西实际上在计算机系有一门专门的课程《编译原理》,有兴趣你可以去翻翻公开课,或者看看这本书:编译原理
《你不知道的JS》系列的第二部《作用域与闭包》,就简单的从编译原理的角度简单的介绍了这个问题,相比上面那本大部头,这本书可能更容易让人接受吧。