javascirpt--执行上下文栈--10

通过一段代码说明执行上下文栈的出栈压栈过程:

var x=20;
var f1=function(y){
	var z=10;
	f2(x+z);
}
var f2=function(m){
	var n=30;
	console.log(m+n);
}
f1(40);

1 代码执行前,创建全局上下文环境:
全局上下文环境:

x:undefined
f1:undefined
f2:undifined
this:window

2 执行代码,执行到f1(40);之前,上下文环境中的变量在执行过程中被赋值:
全局上下文环境:

x:20
f1:function
f2:function
this:window

3 执行到f1(40)这一行,调用f1这个函数
调转到f1这个函数内部,执行函数体语句之前,会创建一个新的执行上下文环境
f1函数的执行上下文环境:

y:10
z:undefined
arguments:[10]
this:windows

将f1函数的执行上下文环境入栈,设置为激活状态,此时全局上下文环境被搁置

4 在f1函数内部,调用f2函数,在执行f2的函数体之前,会创建f2的执行上行下文环境,并设置为激活状态,其他上下文环境被搁置

5 f2函数执行完毕,此时调用f2所生成的上下文环境出栈,并且被销毁(已经用完了就销毁,释放内存)

6 f1函数执行完毕,调用f1函数生成的执行上下文环境出栈,并且被销毁 。

猜你喜欢

转载自blog.csdn.net/weixin_40719943/article/details/106842407