Maison > Questions et réponses > le corps du texte
犀牛书和红宝书中都没有对作用域的概念进行解释。对作用域的概念有些模糊。
在 汤姆大叔 的博客中解释了 变量对象
的含义,是JavaScript用来保存变量和函数的一个机制,文中说:
在具体实现层面(以及规范中)变量对象只是一个
抽象概念
。
而在这篇文章中,却说:
变量对象成为“作用域”这个
抽象概念的实体
。
另外,在segmentfault用户学习笔记中看到这样的理解:
我的理解是,作用域链是由一个一个变量对象链接起来的一个链,整个作用域链构成了当前执行环境中变量和函数可访问的范围,即
作用域
。
请问大家:
作用域到底指的是什么?和变量对象的关系是什么?
变量对象与作用域,到底谁是谁的抽象概念?谁是具体实现?
谢谢回答。
巴扎黑2017-04-11 12:19:42
所以说啊……没有基础就开始看这些非常理论非常形式化的东西很容易把人搞晕……我不是贬低楼主,楼主有求知欲是好事情,也没有囫囵吞枣的接受他人的说法,这点挺好的,只是没有必要在这些文章上花太多时间。
也并不是说写那些文章的人写的不对,而是他们看待问题的角度并不一样,并且穿插了很多自己的想象。
他们设法不牵扯到具体实现,而是从纯粹抽象的语言层面来解释这个问题,自然就变得有点五花八门,看的人有点摸不着头脑。
这个东西实际上在计算机系有一门专门的课程《编译原理》,有兴趣你可以去翻翻公开课,或者看看这本书:编译原理
《你不知道的JS》系列的第二部《作用域与闭包》,就简单的从编译原理的角度简单的介绍了这个问题,相比上面那本大部头,这本书可能更容易让人接受吧。
PHP中文网2017-04-11 12:19:42
你邀请对人了,正好我最近写了一些关于这方面知识的详细分析,推荐给你。
http://www.jianshu.com/p/cd3f...
高洛峰2017-04-11 12:19:42
好吧我来打个岔。。。
变量对象
这个东西真的不值得讨论,因为已经完全过时了。这个概念是在ECMA-262-3
提出的(1999年哦),从ECMA-262-5
开始就被lexical environments
(aka词法环境
)所取代了。
目前最新的标准ECMA-262-7
继续使用lexical environments
并对其进行了比较详细的说明:ECMA-262 7th Edition
好了,学习去吧。。。