在JavaScript中var和let的区别是什么

在 JavaScript 中,varlet 都是用于声明变量的关键字,但是它们在作用域、变量提升和重复声明方面有所不同。

作用域

使用 var 声明的变量是函数作用域或全局作用域的变量。这意味着在声明它的函数内或全局作用域内都可以访问该变量。而使用 let 声明的变量是块级作用域的变量,这意味着它们只在声明它们的块中可见。例如,在一个循环体内声明的变量只能在该循环体内访问。

比如说下面的代码,在if中定义的变量,在if块外仍然能访问。

function example() {
  var x = 1;
  if (true) {
    var x = 2;
    console.log(x); // 输出 2
  }
  console.log(x); // 输出 2
}

function example() {
  let x = 1;
  if (true) {
    let x = 2;
    console.log(x); // 输出 2
  }
  console.log(x); // 输出 1
}

变量提升

使用 var 声明的变量会被提升到函数或全局作用域的顶部,这意味着可以在声明之前使用。而使用 let 声明的变量则不会被提升,试图在声明之前使用会导致引用错误。

console.log(x); // 输出 undefined
var x = 10;

console.log(y); // 报错 ReferenceError
let y = 20;

重复声明

使用 var 可以重复声明同一个变量,而后面的声明会覆盖前面的声明。而使用 let 则不能在同一作用域内重复声明同一个变量。

var x = 10;
var x = 20; // 合法,后面的声明会覆盖前面的声明

let y = 30;
let y = 40; // 不合法,会报错 SyntaxError

letvar 的最大区别在于作用域的不同。

建议在 ES6 及其之后的版本中使用 letconst 声明变量,以便创建块级作用域变量并避免全局命名冲突等问题。

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
上一篇
下一篇