如何精确掌握JavaScript中的执行上下文与作用域?

JS执行上下文是指当前代码的执行环境,包括全局、函数和eval三种。作用域是变量和函数起作用的范围,分为全局和局部作用域。全局作用域中的变量可在整个程序中访问,而局部作用域中的变量只能在特定函数或块级作用域中访问。

执行上下文(Execution Context)和作用域(Scope)是 JavaScript 中两个重要的概念,它们在代码的执行过程中起着关键的作用。

如何精确掌握JavaScript中的执行上下文与作用域?
(图片来源网络,侵删)

执行上下文

执行上下文是评估和执行 JavaScript 代码的环境,每当 JavaScript 引擎遇到一个函数调用时,它会创建一个执行上下文,并将该函数的变量、参数、内部函数等存储在其中,每个执行上下文都有一个关联的变量环境(VariableEnvironment),它包含了当前执行上下文中定义的所有变量。

执行上下文的类型有以下几种:

1、全局执行上下文:当 JavaScript 代码被加载到浏览器或 Node.js 环境中时,会创建一个全局执行上下文,全局执行上下文中的变量可以在任何地方访问。

2、函数执行上下文:每次调用一个函数时,都会为该函数创建一个新的执行上下文,函数执行上下文包含函数的局部变量、参数以及内部定义的其他函数。

如何精确掌握JavaScript中的执行上下文与作用域?
(图片来源网络,侵删)

3、块级执行上下文:ES6 引入了letconst 关键字,它们允许在块级作用域内声明变量,块级执行上下文与任何其他类型的执行上下文类似,但它仅存在于块级作用域中。

作用域

作用域决定了变量和函数的可见性和生命周期,JavaScript 有两种主要的作用域类型:

1、全局作用域:在全局执行上下文中声明的变量和函数具有全局作用域,可以在整个程序中访问。

2、局部作用域:在函数内部声明的变量和函数具有局部作用域,只能在该函数内部访问,块级作用域也是局部作用域的一种形式。

如何精确掌握JavaScript中的执行上下文与作用域?
(图片来源网络,侵删)

作用域链(Scope Chain)是一个用于查找变量的链表结构,当查找一个变量时,JavaScript 引擎首先在当前执行上下文的作用域中查找,如果没有找到,就会沿着作用域链向上查找,直到找到全局作用域,如果仍然没有找到,则返回 undefined。

相关问题与解答

1、问题:什么是执行上下文?它在 JavaScript 中的作用是什么?

解答:执行上下文是评估和执行 JavaScript 代码的环境,它包含了当前执行上下文中定义的所有变量、参数、内部函数等信息,执行上下文有助于确定变量和函数的可见性,并管理它们的生命周期。

2、问题:什么是作用域?为什么我们需要了解作用域?

解答:作用域决定了变量和函数的可见性和生命周期,了解作用域可以帮助我们更好地理解变量的作用范围,避免命名冲突,并编写更清晰、可维护的代码。