📜  JavaScript 中 var、let 和 const 关键字的区别(1)

📅  最后修改于: 2023-12-03 15:16:08.999000             🧑  作者: Mango

JavaScript 中 var、let 和 const 关键字的区别

在 JavaScript 中,我们可以使用不同的关键字来声明变量,包括 varletconst。这些关键字有一些区别,下面是它们之间的详细比较:

var

var 是 JavaScript 中最早引入的变量声明关键字。使用 var 声明的变量作用域是函数级的,也就是说它是函数作用域变量。

function example() {
  var x = 10;
  if (true) {
    var y = 20;
    console.log(x); // 输出 10
  }
  console.log(y); // 输出 20
}

在上面的例子中,xy 都是通过 var 声明的变量,它们在整个函数 example 中都是可见的。

在使用 var 声明变量时,如果没有使用 var 关键字进行声明,变量会被提升到当前作用域的顶部。这种行为被称为变量提升。

function example() {
  console.log(x); // 输出 undefined
  var x = 10;
  console.log(x); // 输出 10
}

在上面的例子中,虽然在第一个 console.log 语句之前声明了变量 x,但在实际执行时,var x = 10 被提升到了作用域的顶部,所以第一个 console.log 输出 undefined

let

let 是在 ES6(ECMAScript 2015)中引入的新的变量声明关键字。使用 let 声明的变量作用域是块级的,也就是说它是在代码块内可见的。

function example() {
  let x = 10;
  if (true) {
    let y = 20;
    console.log(x); // 输出 10
  }
  console.log(y); // 抛出 ReferenceError: y is not defined
}

在上面的例子中,x 是由 let 声明的变量,在整个函数 example 中都是可见的。而 y 是在 if 代码块中声明的变量,所以在 if 之外是不可见的,访问会抛出 ReferenceError

var 不同的是,使用 let 声明的变量不存在变量提升。变量只有在声明位置之后才能被访问到。

function example() {
  console.log(x); // 抛出 ReferenceError: x is not defined
  let x = 10;
  console.log(x); // 输出 10
}

在上面的例子中,由于 x 的声明在第一个 console.log 之后,当执行时会抛出 ReferenceError

const

const 也是在 ES6 中引入的关键字,用于声明常量。与 let 类似,const 也是块级作用域的。

function example() {
  const x = 10;
  if (true) {
    const y = 20;
    console.log(x); // 输出 10
  }
  console.log(y); // 抛出 ReferenceError: y is not defined
}

在上面的例子中,x 是由 const 声明的常量,在整个函数 example 中都是可见的。与 let 类似,y 是在 if 代码块中声明的常量,所以在 if 之外是不可见的。

let 不同的是,使用 const 声明的常量必须进行初始化,并且不能重新赋值。

function example() {
  const x = 10;
  x = 20; // 抛出 TypeError: Assignment to constant variable.
}

在上面的例子中,当尝试给 x 赋一个新的值时会抛出 TypeError 异常。

总结
  • var 是函数级作用域的变量声明关键字,存在变量提升。
  • let 是块级作用域的变量声明关键字,不存在变量提升。
  • const 是块级作用域的常量声明关键字,需要进行初始化,并且不能重新赋值。

根据具体的需求,选择合适的关键字来声明变量是很重要的,这样能够更好地控制变量的作用域和可变性。