let

1.let在块级作用域中起作用,const也一样(const声明时必须赋值,简单数据类型的数不可更改,复杂数据类型不可再次赋值,但可修改内部数据),也就是一个大括号,与var相比,在for循环中,if判断中设置let变量,出了他们的大括号旧不可用,而var可以,但是var如果在函数内部声明,外部也不可访问,此处了let和他一样

            if(true){
                let a =1;
                var b =2;
                
            }
            console.log(b);
            console.log(a);                    

var 作用在全局

 

     var a = []
        for(var i = 0;i<2;i++){
            a[i] = function(){
                console.log(i)
            }
        }
        a[1]();//2
        a[0]();//2

 let循环过程中产生块级作用域

      var a = []
        for(let i = 0;i<2;i++){
            a[i] = function(){
                console.log(i)
            }
        }
        a[1]();
        a[0]();

 

 

 

 2.不会变量提升

3.暂时性死区,在块级作用域中若声明了一个变量,则其中的表达式会优先使用这个变量,若变量声明在表达式之后,则报错,变量提升问题,若使用var声明则为undefined

        var aa =3;
            function a(){
                console.log(aa);
                let aa =4;
            }
            a();

 

posted @ 2020-06-17 09:25  幻星缈宇  阅读(412)  评论(0)    收藏  举报