作用域
控制变量和函数的可见范围和生命周期称为作用域。js内的作用域是静态作用域,并不会因为在其他作用域运行,就调用其他作用域内的变量,而是调用定义其作用域的变量
js
let a = 9
function b () {
console.log(a)
}
function c () {
let a = 88
b() // 打印 9
}
c()作用域链
多个作用域的对象列表,用来执行上下文的检索标识符(变量名,参数,函数名)
作用域的形成
- 在执行上下文阶段,遇到函数声明时,在创建阶段,汇报父级的变量对象集合保存到内部属性[[ scope ]]中,这个集合称之为作用域链
- 然后在运行激活阶段,会复制[[ scope ]],然后创建自身的变量对象加入到其作用链中
JStar