错误之处,欢迎指正。
1. 概念简介
- 执行上下文
是一个函数在运行之前创建的一块内存空间,这个空间有该函数运行所依赖的数据。 - 执行上下文栈
是所有执行上下文组成的空间,javascript
会始终执行栈顶的执行上下文,直到全部执行完毕。 - 全局执行上下文
所有代码执行前,都必须有该环境。 - 函数执行上下文
被执行的函数创建的一块内存空间。
2. 例题
console.log('1');
function a() {
console.log('2');
function b() {
console.log('3');
}
b();
}
a();
console.log('4');
//输出结果1 2 3 4
- 首先全局执行上下文入栈。
- 然后从上而下,开始执行代码,首先执行
console.log('1')
,此时console.log('1')
入栈,打印出了1
,然后出栈。 - 继续向下执行,遇到了
a
的定义,继续向下执行,遇到了a
的执行。 - 此时
a
的执行上下文入栈,首先执行console.log('2')
,此时console.log('2')
入栈,打印出了2
,然后出栈。 - 继续向下执行,遇到了
b
的定义,继续向下执行,遇到了b
的执行。 - 此时
b
的执行上下文入栈,首先执行console.log('3')
,此时console.log('3')
入栈,打印出了3
,然后出栈。 - 此时
a
执行完毕,a
的执行上下文出栈。 - 继续执行全局上下文,遇到了
console.log('4')
,此时console.log('4')
入栈,打印出了4
,然后出栈。 - 此时全局上下文执行完毕,全局上下文出栈,执行上下文栈为空,执行结束。