js中var和let共同点和不同点

发布时间 2023-08-17 16:47:49作者: 不会笑的孩子

说明

let和var是JavaScript中用于声明变量的关键字,它们在一些方面有共同点,但也存在一些重要的区别。

共同点

  • 变量声明:无论是'let'还是'var',都用于声明变量,使得我们可以在代码中存储和操作数据。
  • 赋值:无论是'let'还是'var'声明的变量,都可以通过赋值来存储数据。

不同点

作用域

  • ‘let’具有块级作用域(block scope),它在声明的块(花括号'{}'内)中可见。

  • ‘var’具有函数作用域(function scope),它在声明的函数体内可见。

变量提升

  • var声明的变量会被提升到它们所在的作用域的顶部,可以在声明之前使用,但值为undefined。
  • let声明的变量也会被提升,但在声明之前访问会触发暂时性死区(Temporal Dead Zone,TDZ)错误。

重复声明:

  • 在同一作用域内,使用'var'可以重复声明同名变量,后面的声明会覆盖前面的。
  • 使用'let'在同一作用域内重复声明同名变量会导致错误。

全局对象属性:

  • 使用var声明的变量会成为全局对象(例如浏览器环境下的window对象)的属性,可以通过全局对象访问。
  • 使用let声明的变量不会成为全局对象的属性,不会污染全局命名空间。

循环中的行为:

  • 在for循环中使用var声明的变量在循环体外也是可见的,可能会导致意外行为。
  • 在for循环中使用let声明的变量在循环体内有块级作用域,不会在循环体外部可见
function example() {
  for (var i = 0; i < 5; i++) {
    // ...
  }
  console.log(i); // 输出 5,var 具有函数作用域

  for (let j = 0; j < 5; j++) {
    // ...
  }
  // console.log(j); // 报错,j 不在作用域内
}