JavaScript运行的时候总是会‘一段一段’地执行代码比如
var foo = function () { console.log('foo1'); } foo(); // foo1 var foo = function () { console.log('foo2'); } foo(); // foo2
function foo() { console.log('foo1'); } foo(); // foo2 function foo() { console.log('foo2'); } foo(); // foo2
当执行一段代码的时候,会进行一个“准备工作”,比如第一个例子中的变量提升,和第二个例子中的函数提升。
执行一段代码的时候回进行一个准备工作,比如进行变量,函数提升,这个时候就叫做执行上下文(官方说法),本人理解的是执行一段代码会进行变量和函数的分析让代码符合es标准,
执行上下文栈呢?
JavaScript 引擎创建了执行上下文栈(Execution context stack,ECS)来管理执行上下文
栈是一种数据结构,先进后出,所以,每次最先执行的代码最后出来;
如下
function fun3() { console.log('fun3') } function fun2() { fun3(); } function fun1() { fun2(); } fun1();
// 伪代码 // fun1() ECStack.push(<fun1> functionContext); // fun1中竟然调用了fun2,还要创建fun2的执行上下文 ECStack.push(<fun2> functionContext); // 擦,fun2还调用了fun3! ECStack.push(<fun3> functionContext); // fun3执行完毕 ECStack.pop(); // fun2执行完毕 ECStack.pop(); // fun1执行完毕 ECStack.pop(); // javascript接着执行下面的代码,但是ECStack底层永远有个globalContext