#JS使用词法作用域
词法作用域:函数的作用域在函数定义的时候确定
动态作用域:函数的作用域在函数调用的时候才确定
1 | var value = 1; |
结果是1
接下来看接下来两段代码
1 | var scope = "global scope"; |
结果是local scope
1 | var scope = "global scope"; |
结果是local scope
JavaScript 函数的执行用到了作用域链,这个作用域链是在函数定义的时候创建的。嵌套的函数 f() 定义在这个作用域链里,其中的变量 scope 一定是局部变量,不管何时何地执行函数 f(),这种绑定在执行 f() 时依然有效。
#通过执行上下文来跟踪代码
JS中有两种执行上下文,全局执行上下文和函数执行上下文,执行上下文只有一个,当JavaScript程序开始执行时就已经创建了全局上下文,在每次调用函数时创建一个新的函数执行上下文
使用词法环境跟踪变量的作用域
词法环境(作用域)是JS引擎内部用来跟踪标识符与特定变量之间的映射关系
每个执行上下文都有一个与之关联的词法环境,词法环境中包含了在上下文中定义的标识符的映射表
无论何时创建函数,都会创建一个与之相关联的词法环境,并存储在名为[[Environment]]的内部属性上