【ES6】let和const与var之间的区别

71 阅读2分钟

1. var

在ES5及之前的JavaScript版本中,我们通常使用var关键字声明变量。var存在以下特性:

  • 函数作用域: var声明的变量在整个函数体内都是可见的,而在块级作用域内则无效。这可能导致变量泄漏的问题。
  • 变量提升: 使用var声明的变量会被提升到函数的顶部或全局作用域的顶部。这意味着你可以在声明之前访问变量,但其值会是undefined
console.log(x); // undefined
var x = 5;
console.log(x); // 5

2. let

ES6引入了let关键字,它改善了var存在的一些问题:

  • 块级作用域: 使用let声明的变量具有块级作用域,只在其声明的块或语句中可见。
function f1() {
  let n = 5;
  if (true) {
    let n = 10;
  }
  console.log(n); // 5
}

上面的函数有两个代码块,都声明了变量n,运行后输出 5。这表示外层代码块不受内层代码块的影响。如果两次都使用var定义变量n,最后输出的值才是 10。

  • 不会变量提升:var不同,let声明的变量不会被提升,访问未声明前的变量会导致引用错误。
console.log(y); // ReferenceError: y is not defined
let y = 10;
console.log(y); // 10
  • 不允许重复声明 :let不允许在相同作用域内,重复声明同一个变量。

3. const

const关键字用于声明常量,其特性包括:

  • 块级作用域: 类似于letconst声明的变量也具有块级作用域。
  • 不可重新赋值: 一旦使用const声明变量并赋值,就无法再次重新赋值给该变量。这使得const常用于声明不变的常量。
const PI = 3.14;
PI = 3; // TypeError: Assignment to constant variable.

总结

一般而言,推荐使用letconst,因为它们更安全,有助于避免一些潜在的问题。使用const来声明常量,而对于需要重新赋值的变量则使用let