1. 程式人生 > >js---ES6 let和var

js---ES6 let和var

1.let和var

let:有塊級作用域,必須先宣告再使用變數(不存在宣告提前),不允許重複宣告。

        let arr=[];
        for (var a = 0; a < 10; a++) {
            arr[a]=function(){
                console.log(a);
            };
        }

            for (let a = 10; a < 20; a++) {
            arr[a]=function(){
                console.log(a);
            };
        }
        console.log(arr);   //可以看到有20個函式的陣列
        //arr[3];  檢視控制檯可以看出,作用域鏈上只有兩個,一個是script作用域,往下是window(let出現的是arr在script中,window中是a=10)
        //arr[13]; 作用域鏈上有三個,一個Block裡有a=13(證明每次迴圈的a都被留給函式作為作用域頂端等待函式執行產生),一個script,一個window裡有a=10(證明let只在for中起作用,沒汙染全域性)

    
    var arr = [];
        let b = 33;

        function a() {
            if (true) {
                var b = 22;
                let c = 11;

                function d() {
                    console.log(b, c);
                }
                return d;
            }

        }
        console.dir(a());//看作用域鏈---有四級作用域

Block是由let產生的塊級作用域:只有c是11;

Closure是由var產生的,b是22;

Script是由let產生的類似於全域性的塊級作用域:b是33;

Global作為全域性作用域。

證明:但凡有塊作用域,let就會被分到自己的塊裡,而本來應該相同級別處於同一作用域的var宣告的變數因為不存在塊級作用域,反而到了上一級。