1、什么是执行上下文栈
- 当执行到一个函数的时候,就会进行准备工作,这里的“准备工作”
- js引擎会创建 执行上下文栈
- 开始时向执行上下文栈压入一个全局执行上下文,我们用 globalContext
- 这个原理很重要 当执行一个函数的时候,就会创建一个执行上下文,并且压入执行上下文栈,当函数执行完毕的时候,就会将函数的执行上下文从栈中弹出
// 模拟栈操作
var stack = [globalContext];
function fun3() {
console.log('fun3')
}
function fun2() {
fun3();
}
function fun1() {
fun2();
}
fun1();
// 执行过程模拟
// 伪代码
// 执行fun1()
stack.push(<fun1> functionContext);
// fun1中调用了fun2,还要创建fun2的执行上下文
stack.push(<fun2> functionContext);
// 然而fun2还调用了fun3!
stack.push(<fun3> functionContext);
// fun3执行完毕 弹出
stack.pop();
// fun2执行完毕 弹出
stack.pop();
// fun1执行完毕
stack.pop(); 弹出
// javascript接着执行下面的代码,但是stack底层永远有个globalContext
2、重点
- 先理解这个整体的过程,细节再探