JS中的执行上下文、词法环境和词法作用域都是什么意思

云网络9个月前 (08-28)建站教程127

1.执行上下文,是JavaScript 执行代码的环境;2.词法环境,是用于保存变量和函数的词法作用域信息;3.词法作用域,指的是在编写代码时定义的变量和函数的作用域。在JS中,每个执行上下文都有自己的变量对象、作用域链、this指向等信息,执行上下文会在代码执行的过程中被创建、执行和销毁。

1.执行上下文

执行上下文(Execution Context)是JavaScript 执行代码的环境。每当JavaScript 执行一段代码时,就会创建一个新的执行上下文,并把它压入执行上下文栈中。执行上下文包含了当前代码的运行状态,如变量、函数、对象等信息。JavaScript 引擎会按照执行上下文栈的顺序依次执行每个上下文。

在JS中,每个执行上下文都有自己的变量对象、作用域链、this指向等信息,执行上下文会在代码执行的过程中被创建、执行和销毁。

  • 执行上下文的创建时机有两种情况:

    • 全局执行上下文:当JS代码首次执行时,会创建全局执行上下文,该执行上下文一直存在于整个代码执行过程中,直到程序结束或页面关闭。

    • 函数执行上下文:当函数被调用时,会创建函数执行上下文,该执行上下文只在函数执行期间存在,当函数执行完毕时,执行上下文会被销毁。

  • 执行上下文的属性包括以下几个方面:

    • 变量对象(Variable Object):用于存储变量和函数声明信息的对象,作用域链和this指向都是在变量对象中定义的。

    • 作用域链(Scope Chain):是一个由多个执行上下文环境组成的链表结构,用于查找变量和函数的作用域。

    • this指向:指向函数执行时的上下文对象。

    • 外部函数引用(Outer Environment Reference):指向当前函数外部的执行上下文环境。

2.词法环境

词法环境(Lexical Environment)是一种数据结构,用于保存变量和函数的词法作用域信息。它记录了在代码中定义的变量和函数,以及它们的作用域链信息,每个词法环境都与一个函数或代码块相关联。

  • 词法环境由两个部分组成:

    • 环境记录(Environment Record):用于存储变量和函数声明的信息,包括变量名、函数名、函数参数等等。

    • 外部词法环境引用(Outer Lexical Environment Reference):指向当前词法环境外部的词法环境,用于形成作用域链。

词法环境与执行上下文密切相关,每个执行上下文都包含一个词法环境,当代码在执行过程中遇到变量或函数时,就会查找当前词法环境中是否存在该变量或函数,如果存在则使用该变量或函数,如果不存在则通过作用域链向外部词法环境查找。

3.词法作用域

词法作用域(Lexical Scope)指的是在编写代码时定义的变量和函数的作用域。JS中的作用域是通过词法作用域来实现的,也就是说,函数的作用域是在函数定义时确定的,而不是在函数调用时确定的。当查找变量或函数时,JS引擎会先在当前词法环境中查找,如果没有找到,就会继续向上查找直到全局词法环境。因此,词法作用域是由代码的结构和嵌套关系决定的,与函数的调用位置无关。

词法作用域的作用是保护变量和函数,避免命名冲突和访问冲突。在JS中,每个函数都有自己的词法作用域,函数内部定义的变量和函数只能在函数内部被访问,无法在外部被访问。同时,由于词法作用域的存在,同名变量和函数也可以在不同的词法环境中存在而不产生冲突。


延伸阅读

JS有哪些应用

JavaScript (JS) 是一种流行的编程语言,它可以用于许多不同的应用,包括:

1.网页开发:JavaScript 可以与HTML 和CSS 一起使用,实现动态交互效果,如表单验证、响应式页面、动画效果等。

2.前端框架:JavaScript 框架,如Angular、React 和Vue.js,可以帮助开发人员快速构建现代、交互式的单页面应用程序(SPA)。

3.后端开发:Node.js 是基于JavaScript 的服务器端框架,可以帮助开发人员构建高性能、可扩展的Web 应用程序和API。

4.游戏开发:JavaScript 可以用于创建2D 和3D 游戏,如Phaser 和Three.js。

5.桌面应用程序:Electron 是一个基于JavaScript、HTML 和CSS 的跨平台桌面应用程序框架,可以用于开发桌面应用程序,如VS Code 和Slack。

6.移动应用程序:使用Apache Cordova 和React Native 等框架,可以使用JavaScript 创建原生移动应用程序。

7.数据可视化:JavaScript 的图表库和可视化工具,如D3.js 和Tableau,可以帮助用户更好地理解和分析数据。


相关文章

苹果良心了?!iPhone 15的USB-C接口没任何限制 跟安卓通用

苹果良心了?!iPhone 15的USB-C接口没任何限制 跟安卓通用

快科技9月16日消息,iPhone 15使用的USB-C接口,是标准的接口,苹果也没有任何限制,真的是太良心了?据Ars Technica报道称,苹果新款iPhone 15、iPhone 15 Plu...

卢伟冰打造的Redmi Note 13刷新认知:体验从未如此接近旗舰

卢伟冰打造的Redmi Note 13刷新认知:体验从未如此接近旗舰

快科技9月14日消息,Redmi Note 13系列将于9月21日发布。官方表示,在Redmi十周年之际,Redmi Note 13开启第三篇章:让中端手机体验从未如此接近旗舰,带来新形态、新影像、新...

蚂蚁集团发布“蚁天鉴”大模型安全一体化解决方案

蚂蚁集团发布“蚁天鉴”大模型安全一体化解决方案

9月12日 消息:蚂蚁集团在2023国家网络安全宣传周上发布了名为 “蚁天鉴” 的大模型安全一体化解决方案。这一解决方案包括两大核心产品:“蚁鉴2.0” 大模型安全检测平台和 “天鉴” 大模型风险防御...

罗永浩吐槽iPhone 15:和iPhone 14没太大区别 只是序号不同而已

近日,前锤子CEO罗永浩在直播中对即将发布的iPhone 15系列进行了评价。他表示,根据他对其“子公司”的了解,iPhone 15与iPhone 14在技术上不会有太大区别,只是序号变了,这个“不要...

蓝色光标发布营销行业模型 “Blue AI”

蓝色光标发布营销行业模型 “Blue AI”

9月13日 消息:蓝色光标发布了营销行业模型 “Blue AI”,Blue AI 整合了蓝色光标的专业作业模式和内容沉淀,结合微软云、百度、智谱 AI 等技术支持,引领营销行业进入智能化时代。该模型聚...

Floyd和dij算法计算最短路径有什么区别

区别有:1. 适用场景不同;2. 时间复杂度不同;3. 空间复杂度不同;4. 工作原理不同。Floyd算法适用于计算图中所有节点之间的最短路径,不论是否有负权重的边,只要没有负权重回路。Dijkstr...