执行上下文
每当控制器进入ECMAscript可执行代码的时候,控制器就进入了一个可执行上下文。可执行上下文(简称EC)是一个抽象的概念,在ECMA262中用他来区分不同类型的可执行代码
1
2 我们定义一个可执行上下文的堆栈用数组表示
ECStack = []
可执行代码的类型:
js加载完成之后的初始化(就是我们平时放到最外层,window下执行的代码)会创建一个
1
2
3ECStack = [
globalContext
];函数执行 会把当前函数的执行上下文压入栈中,执行完成之后 再出栈销毁
1
2
3
4
5
6
7
8
9
10//执行 push
ECStack = [
globalContext,
functionContext
];
//执行后 pop
ECStack = [
globalContext,
functionContext
];eval 也会形成执行上下文
实例分析:
1 | var name = 'ngnice' |
上面的代码执行的过程中的上下文变化:
脚本加载完成初始化
1
2
3ECStack = [
globalContext
]执行outer函数
1
2
3
4
5//push outerContext
ECStack = [
globalContext,
outerContext
]执行inner函数
1
2
3
4
5
6//push innerContext
ECStack = [
globalContext
outerContext,
innerContext,
]执行完毕inner
1
2
3
4
5//pop innerContext
ECStack = [
globalContext,
outerContext
]执行完毕outer
1
2
3
4//pop outerContext
ECStack = [
globalContext
]
参考: