学透JS执行上下文

92 阅读1分钟

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、重点

  • 先理解这个整体的过程,细节再探

3、大功告成