let、const、var区别

1.块级作用域包含let和const、var不存在块级作用域

{
      let a = 10;
      const b = 20;
      var c = 30;
 }
    // console.log(a); not defined
    // console.log(b); not defined
    console.log(c); //30

2.var存在变量提升

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

3.var声明的变量为全局变量,会将该变量添加为全局对象属性

 var globalVar = "I am global";
 console.log(window.globalVar);

4.let创建变量可以更改指针指向(重新赋值),是const声明变量不允许改变指针指向

// 对于对象,let 声明的变量可以重新指向一个全新的对象,也可以修改对象的属性
 // let:
    let obj = { a: 1 };
    console.log(obj); // 输出 { a: 1 }

    obj = { b: 2 }; // 重新指向一个新的对象
    console.log(obj); // 输出 { b: 2 }

    obj = { a: 1 };
    obj.a = 3; // 修改对象的属性,而不是重新赋值
    console.log(obj); // 输出 { a: 3 }

    //     const:
    // 不允许重新赋值,即不能改变变量的指针指向。
    // 适用于不需要重新赋值的场景,尤其是对象和数组的引用,可以防止意外地将变量指向新的对象或数组

    const obj = { a: 1 };
    console.log(obj); // 输出 { a: 1 }

    obj.a = 3; // 修改对象的属性,这是允许的
    console.log(obj); // 输出 { a: 3 }

    const arr = [1, 2, 3];
    console.log(arr); // 输出 [1, 2, 3]

    arr.push(4); // 修改数组的内容,这是允许的
    console.log(arr); // 输出 [1, 2, 3, 4]

    arr = [5, 6, 7]; // 报错:TypeError: Assignment to constant variable.

除此之外,还有

1.暂时性死区,使用let和const声明变量之前,该变量不可用,语法上暂时性死区,使用var声明变量不存在暂时性死区

2.变量声明时,var和let可不设置初始值,而const必须设置初始值

3.var声明的变量为全局变量,会将该变量添加为全局对象属性
阅读剩余
THE END