ES6内容

121 阅读2分钟

let和const声明

let与var区别:

1.var出了块级区域有效;

2.let出了块级区域无效;

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

4.let声明不具备变量提升能力,离开区块的作用域后,则变量立刻失效;

如下:

            var value = 10;
            let count = 20;
        }

        console.log(value);   //10
        console.log(count);   //引用错误

49U2~%VB][18C3Q9UF4KX.png

undefined表示变量声明了,只是没有赋值,按理说顺序要在前面

console.log(value);  //undefined
        var value;           //变量提升导致逻辑怪异

输出为:undefined

let声明方式,就算在后面有声明,前面的输出依然是引用错误

console.log(count);   //引用错误
        let count;

在Let声明前使用变量,这段区域被称为“临时死区(或暂时性死区)”

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

一般情况下,typeof来判断未声明的变量,只会输出undefined;

 console.log(typeof value);
         let value;

var声明可以重复声明同一个变量,后面会取代前一个变量;

let声明不可以重复声明一个变量,会直接报错,就算其中一个是var;

   let value = 20;  //两个let报错,let和var各以一个也报错
     var value = 20;   //报错,更换顺序报错

如果一个在作用域外部,一个在作用域内部,则可以并存; let value = 20; { let value = 10; //不建议相同,会乱 }

在循环中,var和let的区别尤为明显,let只在循环内部有效;

var全局有效,导致后续再使用i会引起干扰,而let则不会

     for (let i = 0; i<10; i++){
         console.log(i);
     }
     console.log(i);   //var声明,则10; let声明,报错

如果再循环体内设置函数方法,体外输出var会得到不想要的值

     var list = [];

     for (var i=0; i<10; i++){
         list[i] = function (){
             console.log(i);
         }
     }
     list[5]();   //这里不管设置多少,结果都是10
     

块级作用域