JavaScript 词法环境作为对象
JavaScript lexical environments as objects
我不禁注意到 JS 对象和词法环境之间的类比(如所解释的,例如 here)。两者都是 name/value 对的容器。两者都有一个 link 指向另一个同类事物:在词法环境的情况下,父环境,在 JS 对象的情况下,原型对象。两种 link 实际上都有相同的目的:在词法环境的情况下,在词法环境链中查找变量的值,在对象的情况下,查找 属性在原型链中的价值。
鉴于这个相似的类比,有没有办法在 JS 程序中将词法环境作为对象引用?将来有没有计划在语言中添加这样的功能?我确定它对某些东西有用...
这个类比有一个重要的区别:词法环境是通过静态代码分析创建的,并且不会改变它们的形状。它们是记录,而不是动态对象。这既有助于 interpreter/compiler 优化查找,又能防止它们作为对象公开。
只有两个小东西引入了动态作用域:eval
和 with
。 (后者允许将动态对象实际放入作用域链中)。他们都因此被鄙视
我不禁注意到 JS 对象和词法环境之间的类比(如所解释的,例如 here)。两者都是 name/value 对的容器。两者都有一个 link 指向另一个同类事物:在词法环境的情况下,父环境,在 JS 对象的情况下,原型对象。两种 link 实际上都有相同的目的:在词法环境的情况下,在词法环境链中查找变量的值,在对象的情况下,查找 属性在原型链中的价值。
鉴于这个相似的类比,有没有办法在 JS 程序中将词法环境作为对象引用?将来有没有计划在语言中添加这样的功能?我确定它对某些东西有用...
这个类比有一个重要的区别:词法环境是通过静态代码分析创建的,并且不会改变它们的形状。它们是记录,而不是动态对象。这既有助于 interpreter/compiler 优化查找,又能防止它们作为对象公开。
只有两个小东西引入了动态作用域:eval
和 with
。 (后者允许将动态对象实际放入作用域链中)。他们都因此被鄙视