ES6 let和var区别

151 阅读1分钟

var和let的区别:

1、var具有变量提升能力,不管在哪里声明均视为作用域顶部声明

2、let声明不具备变量提升能力,离开区块的作用域后,则失效

3、let适合局部变量

4、let带来的区别:声明之前使用时,产生的结果不同

{
               var v=10;
              let c=20;
          }
           console.log(v);//10
         console.log(c);//引用错误

效果:

2.png

          console.log(v);//undefined
          var v;//变量提升导致逻辑怪异
          console.log(c);//引用错误
          let c;//变量提升导致逻辑怪异
        //    在一个区域内部只要使用let声明,这个区域就形成了封闭的作用域

效果:

3.png

临时死区 简称TDZ 使用typeof也会报错

 if(true){
        //     // 死区开始
             v=10;
             console.log(v);
             //死区结束
             let v;
         }

typeof判断未声明的变量 会直接报错 就算其中一个是var 会直接输出undefined

console.log(typeof v);

如果声明 let v;就会报错 必须声明在前面

let v=10;
var v=20;//报错,更换顺序报错
console.log(v);

两个let报错,let和var各一个也报错,只要有let就不能重复声明同一个变量

如果在一个作用域外部,一个在内部,则可以并存

 let v=10;
{
 console.log(v);//不建议相同,会乱
 }

在循环中的区别:let只在内部有效,var全局有效,后续会有干扰,let没有

for(var i=0;i<10;i++){
                 console.log(i);
             }
             for(let i=0;i<10;i++){
                 console.log(i);
             }
 var list=[];
            for(var i=0;i<10;i++){//这里改成let,会得到想要的值
                list[i]=function(){
                    console.log(i);
                }
            }
            list[5]();//不管设置多少,都是10