-
js有两种对象:上文成员(js语法可以直接访问的成员)和下文成员((1)底层语法访问的成员 如[[scopes]])
函数在声明的时候就会在[[scopes]] 里面保存了上层作用域的AO对象(Activation 0bject),函数本身不会生成AO对象
function fn() {
}
console.dir(fn)
fn()
这里的fn在全局中声明,所以上层作用域对象为GO对象(Globe Object)
- 1. 在函数被调用时才会生成本层作用域的AO对象保存在[[scopes]]。按本层AO对象拜访成员,逐级向上寻找需要的数据。
function fn() {
function fn1() {
function fn2() {
}
}
}
函数在每次调用都会产生新的AO对象,在代码执行完毕之后就会销毁
下面这个图也是作用域链的示意图