这两个是不是同一事物啊?
In JavaScript, all local variables and functions are properties of the special internal object, called LexicalEnvironment
这两个是不是同一事物啊?
In JavaScript, all local variables and functions are properties of the special internal object, called LexicalEnvironment
两者还是不一样的,虽然从技术实现的本质来看,区别不大。并且从定义角度来看都是定义了在ECMAScript 嵌套词法结构上标识符与变量值和函数的关联关系。
但其中有一点很重要,词法环境是支持词法地址,虽然在规范中并没有提到,但老版通过变量对象实现的显然不支持的。此外,词法地址的抽象角度更高,更适合描述es的目前内容。
还有很重要的,词法环境的组成也发生了很大变化,词法环境是由环境记录项和一个指向外部环境的outter属性组成。环境记录项里面包括内容可以类比为ES3中的变量对象。而[[scope]]中变量对象不是这样。
如果要详细了解,可以看看执行上下文,从执行上下文角度来看,目前执行上下文组成已经变了词法环境,变量环境加this绑定,每一个都与过去不同。
词法环境和变量环境中的函数声明(FD)和函数表达式(FE)中[[scope]]值的不同。
另外,在严格模式下,有很多内容都发生了改变。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
请看文中第二节的第一句话:
所以此文的作者认为在
js
中,LexicalEnvironment是个对象,它保存了作用域的信息,也就是题主所说的[[scope]],包括此作用域下的参数、变量以及嵌套(链式)的函数作用域信息。另外下面这句话也是佐证之一。