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

小编 299

1.执行上下文,是JavaScript 执行代码的环境;2.词法环境,是用于保存变量和函数的词法作用域信息;3.词法作用域,指的是在编写代码时定义的变量和函数的作用域。每当JavaScript 执行一段代码时,就会创建一个新的执行上下文,并把它压入执行上下文栈中。执行上下文包含了当前代码的运行状态,如变量、函数、对象等信息。JavaScript 引擎会按照执行上下文栈的顺序依次执行每个上下文。

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,可以帮助用户更好地理解和分析数据。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部