javascript基础(六)执行上下文栈

本文解析了JavaScript中执行上下文的概念,包括全局执行上下文及函数执行上下文的创建与销毁过程,通过具体示例展示了执行上下文的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

执行全局代码时会产生一个执行上下文环境,每次调用函数又会产生一个执行上下文环境。当函数调用完成后,这个环境以及里面的数据便会消除,再回到全局执行上下文环境中。处于活动中的执行上下文只有一个。这就好比一个压栈出栈的过程。

下面看一个例子

    var a = 10,
            fn,
            bar = function (x) {
                var  b = 5
                fn(x + b)
            }

    fn = function (y) {
        var c = 5
        console.log(y + c)
    }

    bar(10)

我们只看结果的话很简单,bar执行,调用fn,输出结果就完了
从执行上下文来看呢,
在执行代码前,先创建全局执行上下文环境

变量
aundefined
fnundefined
barundefined
thiswindows

然后代码执行,直到bar(10)执行之前都没有进入函数内部,因此都是在全局执行上下文环境中执行的

变量
a10
fnundefined
barundefined
thiswindows

所以只能给a赋值
接下来bar的执行,开始创建bar执行上下文环境

变量
x10
arguments[10]
bundefined
thiswindows

此时将这个环境压栈,并使其处于激活状态

下面在bar执行上下文环境下执行代码,对环境进一步更新,直到fn被调用

变量
x10
arguments[10]
b5
thiswindows

到了fn了,开始创建fn执行上下文环境

变量
y15
arguments[15]
cundefined
thiswindows

将fn环境压栈,并激活

在fn的环境下执行代码,更新环境

变量
y15
arguments[15]
c5
thiswindows

好了这样一来,fn的代码就执行完了,需要让fn环境出栈,并销毁里面的变量

再次回到bar的环境执行剩余代码,当bar函数中的内容被全部执行完毕后,也被弹出销毁

又回到全局上下文环境了。全局上下文环境暂时不会被销毁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值