Skip to content

理解JavaScript变量和作用域

我见过很多开发者 - 包括我年轻的自己 - 在处理JavaScript的变量和作用域时遇到困难,即使他们对编码和/或语言本身有一些经验。虽然有很多关于这个主题的优秀文章,但当我刚开始学习时,我发现很难记住或理解这些概念的工作方式,所以这里有一个简短而简单的解释,希望能帮助你像帮助我一样。

变量定义

JavaScript提供了两种定义变量的方式(varlet)和一种定义常量值的方式(const)。

letconst在作用域方面的行为相同,都是块级作用域(见下文)。另一方面,var的行为不同,它是函数作用域(见下文),这意味着在块级作用域内声明的var变量也会在最近的外部函数块中可用。

通常情况下,为了避免混淆,最好使用letconst。然而,重要的是要注意,在正确的情况下,var可以是一个有用的JavaScript特性。

JavaScript变量作用域的可视化

作用域

当我们谈论作用域时,我们指的是一个或多个实体(例如变量)对代码中某些部分的可见性。作用域有两种类型:全局作用域和局部作用域。局部作用域又可以分为块级作用域、函数作用域和其他更具体的作用域类型。

全局作用域:在全局作用域中定义的变量(即不在块或函数内部)是全局作用域的一部分,可以从代码的任何地方访问。在全局作用域中声明时,varletconst在作用域方面的行为相同。

局部作用域:在块或函数内定义的变量只能从定义它们的块或函数以及嵌套的局部作用域中访问。当在块作用域内声明时,var 变量在外部作用域中可用但为 undefined,而 letconst 在外部作用域中不存在。当在函数作用域内声明时,varletconst 在外部作用域中都不存在。