作用域链
VO 中包含一个额外的属性,该属性指向创建该 VO 的函数本身。
每个函数在创建时,会有一个隐藏属性
[[scope]]
,它执向创建该函数时的 AO。当访问一个变量时,会先查找自身 VO 中是否存在,如果不存在,则依次查找
[[scope]]
属性。
var g = 0
function A() {
var a = 1
function B() {
var b = 2
var C = function() {
var c = 3
console.log(c, b, a, g)
}
C()
}
B()
}
A() // 依次输出 3 2 1 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
图示: