在 ES2015 之前,JavaScript 仅支持函数级作用域,这与 C++/ Java等其他具有块级作用域的语言不同。在 ES2015 中,除了函数级作用域之外,JavaScript 还通过“let”和“const”关键字支持块级作用域。
但在我们深入了解 ES2015 的细节之前,让我们先讨论一下短语“函数级作用域”和“块级作用域”的确切含义。
块级范围:使用 C++ 的简单示例
例如,在 C++ 中,我们在 if-condition 中声明了一个变量“message”。当我们在 if 条件本身中打印字符串消息时,它可以正常工作。
但是如果我们尝试在 if 条件的右大括号之后打印字符串呢?它抛出一个错误,指出“消息”未在此范围内声明。
函数级范围:
现在让我们看看 JavaScript 中的函数作用域。
在上面的代码片段中,我们在 if 条件中声明并定义了一个变量消息。然后我们使用 console.log() 打印该值。我们得到了预期的输出。
棘手的部分是我们还能够在 if 条件之外打印变量 ‘message’ 的值。这是因为在 JavaScript 中,使用关键字“var”声明的函数默认具有函数作用域。 JavaScript 运行时会寻找与变量声明最接近的封闭函数,并将其设置为该变量的作用域。
但是 JavaScript 运行时是如何做到这一点的呢?在这里值得一提的是,JavaScript 运行时在内部更改了我们的代码并将所有变量声明移动到函数的开头。这称为可变提升。因此,我们在当前示例中的代码有效地更改为以下代码片段。
要深入了解 ES2015 之前 JavaScript 中变量范围的概念,请参阅文章 https://www.geeksforgeeks.org/understanding-variable-scopes-in-javascript/
所以现在当我们清楚什么是函数作用域和块作用域之后,让我们看看 ES2015 如何在 JavaScript 中实现块作用域。从 ES2015 开始,除了关键字“var”之外,还有两个新关键字可用于声明变量。
- Let:使用 ‘let’ 关键字声明的变量与使用 ‘var’ 关键字声明的变量相似,只有一次不同。使用 ‘let’ 声明的变量将具有块作用域并且不会被提升到函数的开头。因此,如果我们尝试在块范围之外访问这些变量,我们将收到一个引用错误,指出变量未定义。
使用“let”关键字声明的变量也可以重新定义但不能重新声明。
- Const:使用“Const”关键字声明的变量类似于使用“let”关键字声明的变量,但有一个附加功能,即一旦声明和定义,它们的值就无法更改。 Const 变量的主要用途是使只读常量像
此外,在声明本身时必须定义 const 变量。
因此,在本教程中,我们研究了两个可用于在 JavaScript 中声明变量的新关键字。一旦您在声明变量时开始使用这些关键字,在极少数情况下您将需要再次使用“var”关键字。因此,请熟悉这些新关键字,并在评论中告诉我您的观点。
关于作者:
“Harshit 是一名技术爱好者,对编程有着浓厚的兴趣。他拥有技术学士学位。在诺伊达 JIIT 获得计算机科学学位,目前在 MakeMyTrip 担任高级软件开发人员。他还是国家级乒乓球运动员。除此之外,他喜欢通过看电影和英语情景喜剧来放松。他在德里工作,您可以通过 https://in.linkedin.com/pub/harshit-jain/2a/129/bb5 与他联系
如果您还想在这里展示您的博客,请参阅 GBlog,了解 GeeksforGeeks 上的客座博客写作。