说一说执行上下文栈与执行上下文
什么是执行上下文栈?
执行上下文栈是js引擎用来管理执行上下文的一种数据结构,用于存储和跟踪当前正在执行的这个代码段的执行上下文。
(js引擎是什么?js引擎是一种解释和执行JavaScript代码的程序。js引擎通常在浏览器或其他JavaScript运行环境里面)(执行上下文不是JavaScript语言本身的一部分,是js引擎内部的概念)
什么是执行上下文?
执行上下文是js引擎用来管理代码执行的环境,包含了变量、函数和其他数据的信息。每当js引擎执行一个代码段时,它会创建一个执行上下文,并将其推入执行上下文栈的顶部。执行完毕时对应的执行上下文会从执行上下文栈中弹出。
执行上下文的分类:全局执行上下文、函数执行上下文、块级执行上下文
全局执行上下文:js引擎最先创建的是全局执行上下文,最先入栈,一般情况下,它是最后出栈的。
函数执行上下文:在调用一个函数的时候,会创建一个对应的函数上下文
块级上下文:当进入一个代码块的时候,会创建一个块级上下文。比如说,进入if语句或者循环的代码块的时候会创建一个块级执行上下文。
执行上下文的执行顺序:
以下面这段简单代码为例,分析上下文的执行顺序。
function fun3() {
console.log('fun3')
}
function fun2() {
fun3();
}
function fun1() {
fun2();
}
fun1();
文字解释:
1.创建全局执行上下文,并将其推入执行上下文栈的顶部。
2.执行fun1函数,创建一个函数执行上下文,入栈
3.fun1函数里要执行fun2函数,创建fun2的函数执行上下文,入栈
4.fun2函数里要执行fun3函数,创建fun3的函数执行上下文,入栈
5.执行fun3函数的console.log('fun3')语句。执行完fun3函数,将它的上下文出栈
6.此时栈顶是fun2的上下文,继续执行fun2,执行完fun2函数,将它的上下文出栈
7.此时栈顶是fun1的上下文,继续执行fun1,执行完fun1函数,将它的上下文出栈
8.此时栈中只剩下全局执行上下文,继续执行全局作用域中的剩余代码。执行完,出栈。
执行上下文的3组成:变量对象,作用域链、this
执行上下文的作用:
通过执行上下文,JavaScript引擎能够正确处理变量和函数的作用域和生命周期。
参考文章: