var、let、const小结

101 阅读1分钟

一、var:

1、提升
    console.log(num); // undefined
    var num = 1;
    var定义的变量会声明提升,可以理解为:
    var num;
    console.log(num);
    num = 1;
2、变量覆盖
    var num = 1;
    var num = 2;
    console.log(num); // 2
    这段代码并不会报错,以上代码可以看成:
    var num;
    num = 1;
    num = 2;
    console.log(num); // 2
3、没有块级作用域
    function demo(){
        for(var i=0; i<3; i++){
        }
        console.log(i);  //3
    }
    由于没有块级作用域,循环之后,i仍然存在
4、var在全局作用域下声明变量会挂载在 window 上
    var num = 1;
    console.log(window.num);  // 1
 5、var是具有函数作用域的
     var a = 1;
     function fn() {
         var a = 10
     }
     fn();
     console.log(a); // 1
     在函数中用var声明的变量和全局作用域的相同,也不会进行覆盖。

二、let、const:

1const声明的变量必须赋初始值、let则不用
2const定义的值无法直接更改,而let定义的值可以更改
3letconst 定义的变量不会挂载在 windowlet num1 = 1
    let num2 = 2
    console.log(window.num1)  // undefined
    console.log(window.num2)  // undefined
4、支持块级作用域

三、暂时性死区:

function demo(){
    console.log(num) // ReferenceError: num is not defined
    let num = 1
}
letconst 存在暂时性死区,声明前不可使用