JS中的执行上下文、词法环境和词法作用域都是什么意思
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,可以帮助用户更好地理解和分析数据。