ホームページ  >  に質問  >  本文

javascript - 请教作用域与变量对象的关系◔ ‸◔?

犀牛书和红宝书中都没有对作用域的概念进行解释。对作用域的概念有些模糊。
在 汤姆大叔 的博客中解释了 变量对象 的含义,是JavaScript用来保存变量和函数的一个机制,文中说:

在具体实现层面(以及规范中)变量对象只是一个抽象概念

而在这篇文章中,却说:

变量对象成为“作用域”这个抽象概念的实体

另外,在segmentfault用户学习笔记中看到这样的理解:

我的理解是,作用域链是由一个一个变量对象链接起来的一个链,整个作用域链构成了当前执行环境中变量和函数可访问的范围,即作用域

请问大家:

  1. 作用域到底指的是什么?和变量对象的关系是什么?

  2. 变量对象与作用域,到底谁是谁的抽象概念?谁是具体实现?

谢谢回答。

大家讲道理大家讲道理2771日前354

全員に返信(3)返信します

  • 巴扎黑

    巴扎黑2017-04-11 12:19:42

    1. 所以说啊……没有基础就开始看这些非常理论非常形式化的东西很容易把人搞晕……我不是贬低楼主,楼主有求知欲是好事情,也没有囫囵吞枣的接受他人的说法,这点挺好的,只是没有必要在这些文章上花太多时间。

    2. 也并不是说写那些文章的人写的不对,而是他们看待问题的角度并不一样,并且穿插了很多自己的想象。

    3. 他们设法不牵扯到具体实现,而是从纯粹抽象的语言层面来解释这个问题,自然就变得有点五花八门,看的人有点摸不着头脑。

    4. 这个东西实际上在计算机系有一门专门的课程《编译原理》,有兴趣你可以去翻翻公开课,或者看看这本书:编译原理

    5. 《你不知道的JS》系列的第二部《作用域与闭包》,就简单的从编译原理的角度简单的介绍了这个问题,相比上面那本大部头,这本书可能更容易让人接受吧。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-11 12:19:42

    你邀请对人了,正好我最近写了一些关于这方面知识的详细分析,推荐给你。

    http://www.jianshu.com/p/cd3f...

    返事
    0
  • 高洛峰

    高洛峰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

    好了,学习去吧。。。

    返事
    0
  • キャンセル返事