《JavaScript》学习之路——var和let的区别

102 阅读2分钟

var和let的区别:

1. 作用域:

var声明的变量具有函数作用域,即在函数内部声明的变量只在函数内部可访问。

let声明的变量具有块级作用域,即在代码块内部声明的变量只在该代码块内部可访问。

2. 变量提升:

使用var声明的变量会进行变量提升,即在其作用域范围内的任何位置都可以访问该变量,无论实际声明语句的位置在哪里。

使用let声明的变量不会进行变量提升,只有在变量声明语句之后才能访问该变量。

3. 重复声明:

使用var可以重复声明同一个变量,而不会报错,后续的声明会覆盖前面的声明。

使用let在同一个作用域内重复声明同一个变量会报错。

4. 全局对象属性:

使用var声明的全局变量会成为全局对象的属性。

使用let声明的全局变量不会成为全局对象的属性。

代码示例:

function example() {
    //在变量声明之前访问a时,a的值还没有被赋值
    console.log(a); // 输出 undefined
    //在变量声明之前访问b,b还没有被声明
    console.log(b); // 报错 ReferenceError: b is not defined
  
    var a = 0;
    let b = 20;
    let b = 10; // 报错 Identifier 'b' has already been declared~~
  
    if (true) {
        var a = 30;
        let b = 40;
        console.log(a); // 输出 30
        console.log(b); // 输出 40
    }
      // 在if语句块内部重新赋值的a会影响到函数作用域内的a的值
    console.log(a); // 输出 30
    // 在if语句块内部声明的b只在该块内部有效,不会影响外部的b的值。
    console.log(b); // 输出 20
}

example();

由于let具有更好的作用域和变量声明的限制,现在一般推荐使用let来声明变量。这样可以避免一些常见的JavaScript问题(变量提升、重复声明导致的错误)