微信公众号
扫描关注微信公众号
博客大厅

JS 中执行上下文的类型有哪些?

原创 来源:博客站 阅读 0 02月20日 13:57 听全文

在 JavaScript 中,执行上下文(Execution Context)是代码执行的环境,决定了变量和函数在当前作用域中的可访问性。执行上下文主要有三种类型:

全局执行上下文(Global Execution Context):

这是最外层的执行上下文,在 JavaScript 代码开始执行时创建。 全局对象(在浏览器中是 window,在 Node.js 中是 global)是这个上下文的一部分,并且这个上下文中的变量和函数会成为全局变量和全局函数。 全局执行上下文在整个程序的生命周期内都存在。

函数执行上下文(Function Execution Context):

每当一个函数被调用时,都会创建一个新的函数执行上下文。 函数执行上下文会有自己的作用域链,这个作用域链包含了该函数的参数、局部变量、以及通过闭包(closure)可访问的外层函数变量。 函数执行上下文在函数执行完毕后会被销毁,除非有闭包引用其变量。

Eval 执行上下文(Eval Execution Context):

eval 函数会创建一个新的执行上下文。 eval 函数的执行上下文在严格模式下(strict mode)表现得像一个函数执行上下文,而在非严格模式下表现得像全局执行上下文(但不同于全局上下文,它仍然是一个独立的上下文)。 然而,由于 eval 带来的安全性和可维护性问题,现代 JavaScript 开发中通常建议避免使用 eval。

执行上下文的生命周期 每个执行上下文都会经历以下三个阶段:

创建阶段(Creation Phase):

在这个阶段,变量对象(Variable Object, VO)被创建,并且函数声明和变量声明会被添加到这个对象中。注意,函数声明会优先于变量声明被处理(即所谓的变量提升,hoisting)。 this 值也被确定。

激活阶段(Activation Phase):

也称为执行阶段(Execution Phase),在这一阶段,执行上下文成为活动执行上下文,开始执行代码。 创建阶段中添加的变量对象(VO)现在成为了活动对象(Activation Object, AO)。

完成阶段(Completion Phase):

执行上下文中的代码执行完毕后,执行上下文会被销毁,其中的变量和函数作用域也随之消失(除非有闭包引用)。

理解执行上下文是理解 JavaScript 作用域、闭包、变量提升等概念的基础。

学在每日,进无止境!更多精彩内容请关注微信公众号。
原文出处: 原创内容,请勿使用于商业用途。如若转载请注明原文及出处。
出处地址:http://www.07sucai.com/tech/435.html
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。
>