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

最常见的说法是:页面关闭前全局执行上下文会一直在执行上下文栈的最底端,直到页面关闭。

但是,在事件循环中,又有这样的说法:js执行上下文栈为空的时候会检查任务队列……

如果全局执行上下文一直在ECS中,ECS又怎会为空。又或者说,这两个执行上下文栈不是同一个?


Smart猫小萌
浏览 850回答 3
3回答

人到中年有点甜

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

qq_遁去的一_1

JS引擎创建了执行上下文栈ECS来管理执行上下文当应用程序结束的时候,栈清空。所以结束之前,栈底部一直有全局执行上下文第二个问题我也不清楚,期待解答~

翻翻过去那场雪

我的理解,执行上下文包含全局上下文
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript