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
原文:https://www.cnblogs.com/qqfontofweb/p/11932826.html