let声明变量:

1、同一个作用域下不能声明同名的变量名


    let count = 11;
    let count = 12;//报错:Uncaught SyntaxError: Identifier 'count' has already been declared    
    

2、不会把声明的变量放到window上:

    let temp = 10;
    console.log(temp);//10
    console.log(window.temp);//undefind
    

3、在所在的块中会形成块级作用域

    
    if for switch while .......
       
    for(let i=0; i<4; i++){
            console.log(i);//0       1      2       3
    }
    // 第一次做循环的时候会声明一个变量为i值为0
    // 第二次会重新声明变量为i,i的值为上一次结果作为初始值,i为1
    //依次类推...

4、不会提升变量


    //只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。 称呼叫做暂存死区(TDZ)。
    

var声明变量:

1、在同一个作用域中可以声明同名的变量,但会污染变量


    var index = 1;
    console.log(index);//1
    var index = 3;
    console.log(index);//3

2、会把声明的变量字自动提升至window身上,作为window的属性

    
    var num = 2;
    console.log(num);//2
    console.log(window.num);//2

3、var会提升变量

    
    console.log(a);//undefined,var声明的变量会提升,只是未定义值,所以是undefined
    console.log(b);//找不到变量名是引用错误ReferenceError
    
    var a = 1;
    let b = 2;  //let声明的变量不会提升,在之前使用,就会报错                                    
    
    
   

xiaoyingZha
17 声望2 粉丝

就是这么滴......