我不禁注意到JS对象与词法环境之间的类比(例如,here的解释)。两者都是名称/值对的容器。两者都链接到同类型的另一事物:在词法环境中,父环境,在JS对象中,原型对象。两种链接实际上具有相同的目的:在词法环境中,在词法环境的链中查找变量的值,在对象的情况中,在原型链中查找属性的值。>
基于这种近似的类比,是否有一种方法可以从JS程序中将词法环境作为对象引用?将来是否有计划将这种功能添加到语言中?我确定它对某些东西很有用...
答案 0 :(得分:1)
类推的一个重要区别是:词汇环境是通过静态代码分析创建的,并且不改变其形状。它们是记录,而不是动态对象。这既有助于解释器/编译器优化查找,又可以防止将它们公开为对象。
只有两件事介绍了动态范围:eval
和with
。 (后者允许将动态对象实际放在作用域链中)。他们俩都因此而被鄙视。