JavaScript声明变量的方式

145 阅读3分钟

一、三种声明变量的方式

  1. var:
    • 作用域:var 声明的变量具有函数作用域或全局作用域。在函数内部使用 var 声明的变量在整个函数内都是可见的;在函数外部声明的变量则是全局变量。
    • 变量提升:使用 var 声明的变量会被提升到其所在作用域的顶部,这意味着在变量声明之前就可以访问该变量,只不过其值为 undefined 。
    • 重复声明:可以在同一作用域内多次使用 var 声明同一个变量,后面的声明会覆盖前面的声明。
  2. let:
    • 作用域:let 声明的变量具有块级作用域,即在 {} (如 if 语句块、for 循环块等)内声明的 let 变量,在块外不可访问。
    • 不存在变量提升:在 let 变量被声明之前访问它会导致错误。
    • 不可重复声明:在同一作用域内,不能使用 let 重复声明已经存在的变量。
  3. const:
    • 常量:const 声明的变量是常量,一旦被赋值,其值就不能被重新修改。
    • 作用域和提升:与 let 类似,具有块级作用域,不存在变量提升。
    • 并非值不可变:如果 const 声明的是对象或数组,虽然不能重新赋值给变量本身,但可以修改对象的属性或数组的元素。

二、块级作用域与函数作用域的区别

    块级作用域提供了更细粒度的变量控制和封装,使得代码更加模块化和可维护,减少了变量污染和意外修改的风险。而函数作用域则是传统的作用域规则,在早期的 JavaScript 中广泛使用。随着语言的发展,块级作用域(通过 let 和 const)在现代 JavaScript 编程中被更多地采用。
  1. 定义范围:
    • 函数作用域是由函数定义的。在函数内部声明的变量在函数外部是不可访问的,反之亦然。
    • 块级作用域是由花括号 {} 界定的,例如 if 语句、for 循环、while 循环、try/catch 语句的块等。在这些块内部声明的变量在块外部是不可访问的。
  2. 变量可见性:
    • 在函数作用域中,变量在整个函数内部都是可见的。
    • 在块级作用域中,变量仅在对应的块内可见。
  3. 变量提升:
    • 对于使用 var 声明的变量,在函数作用域中存在变量提升,即变量可以在声明之前使用,其值为 undefined 。
    • 在块级作用域中(使用 let 和 const 声明的变量)不存在变量提升,在变量声明之前使用会导致错误。
  4. 重复声明:
    • 在一个函数作用域内,可以多次使用 var 声明同一个变量,后面的声明会覆盖前面的声明。
    • 在同一个块级作用域内,不能使用 let 或 const 重复声明已经存在的变量。