我需要了解
JavaScript中变量环境与词法环境之间的区别.实际上我会查看stackoverflow和doc中提供的一些注释,但是很难理解.如果你因为我的英语知识不好而向我解释,我会很高兴的.
解决方法
注意
这个答案涉及ECMA-262 ed 5.1.后来的版本修改了变量和词法环境的描述,以适应let和const的词法作用域(它们都是块作用域).
根据ECMA-262 §10.3,变量环境是某种类型的lexical environment.两者都是“规范类型”,仅用于描述ECMAScript的特征.您无论如何都无法访问它们或直接修改它们,ECMAScript实现不必以任何特定方式实现它们,它们只需按照规范实现就好了.
词法环境由environment record组成,可以将其视为一个对象,其属性是在关联的执行上下文中声明的变量和函数名称.对于函数,它还具有来自函数声明或表达式中的形式参数列表的标识符(例如,函数foo(a,b){}在foo的环境记录中有效地声明a和b作为变量.
词汇环境还具有到任何外部词汇环境(即其范围链)的链接,因此它用于解析当前execution context之外的标识符(例如,来自函数内的全局变量).它们可以与除了函数和执行上下文之外的其他结构相关联,例如,try..catch和语句.
变量环境只是执行上下文中词法环境的一部分,基本上只是当前上下文中声明的变量和函数.
任何想要纠正上述内容的人,请加入.