为了账号安全,请及时绑定邮箱和手机立即绑定

JS运行过程中,全局执行上下文(global EC)一直在执行上下文栈(ECS)中吗。

JS运行过程中,全局执行上下文(global EC)一直在执行上下文栈(ECS)中吗。

Smart猫小萌 2019-03-21 18:15:13
最常见的说法是:页面关闭前全局执行上下文会一直在执行上下文栈的最底端,直到页面关闭。但是,在事件循环中,又有这样的说法:js执行上下文栈为空的时候会检查任务队列……如果全局执行上下文一直在ECS中,ECS又怎会为空。又或者说,这两个执行上下文栈不是同一个?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

执行上下文栈只有一个;
全局上下文并不会一直在执行上下文栈中。

也就是说,我们经常听到的全局执行上下文会一直在栈底直到浏览器关闭是错误的理解

然后我来解释一下:
1,全局上下文会出栈,并不是一直在栈底。
全部代码运行结束,ECS就为空,也就是说,全局执行上下文会出栈,但是全局词法环境(global lexical environment)还存在。
2,执行全局代码的时候会再次创建全局上下文。
当你执行全局的代码的时候(例如,从控制台执行代码),浏览器就会将全局词法环境用来创建全局上下文(当然,全局上下文中不只有这个)。然后,代码就会在这个全局上下文中执行。
3,事件循环中执行队列中的事件时会再次创建上下文。
当ECS为空时,浏览器会从任务队列中删除一条任务,并且用这条任务相关的信息创建执行上下文,也就是全局上下文。

查看完整回答
反对 回复 2019-04-11
?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

JS引擎创建了执行上下文栈ECS来管理执行上下文
当应用程序结束的时候,栈清空。
所以结束之前,栈底部一直有全局执行上下文

第二个问题我也不清楚,期待解答~


查看完整回答
反对 回复 2019-04-11
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

我的理解,执行上下文包含全局上下文


查看完整回答
反对 回复 2019-04-11
  • 3 回答
  • 0 关注
  • 847 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号