ES6入門——let和const命令

Dragon_GL發表於2016-07-03

let命令

ES6新增了let命令用於宣告變數。它的用處和var很相似,只不過let所宣告的變數只在let命令所在的程式碼塊內有效。看下下面程式碼:

  {
        let a = 10;
        var b = 9;
    }
    alert( a );  // ReferenceError: a is not defined
    alert( b );  //9

再看看下面程式碼:

var a = [];
    for(var i = 0; i < 10; i++) {
        var c = i;
        a[i] = function() {
            console.log( c );
        };
    }
    a[6]();  //9

而如果使用let宣告的話,最後輸出的值是“6”。程式碼如下:

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

此外,let宣告的變數不會提升。看下下面的程式碼片段。

    function do_someting() {
        console.log( a );  //ReferenceError
        let a = 2;
    }

最後,let不允許在相同的作用域內,重複宣告同一個變數。

    // 報錯
    {
        let a = 10;
        var a = 1;
    }

    // 報錯
    {
        let a = 10;
        let a = 1;
    }

let實際上是JavaScript增加的塊級作用域。

    function foo() {
        let n = 6;  
        if (true) {
            let n = 10;
        }
        console.log( n ); //6
    }

上面程式碼有兩個程式碼塊,都宣告瞭n變數,執行後輸出的是6。這表明外層程式碼塊不受內層程式碼塊的影響。如果,改成使用var定義變數n的話,最後輸出的就是10.

另外,ES6還規定,函式本身的作用域在其所在的程式碼塊作用域之內。

    function f() { console.log("I am outside"); }
    (function () {
        if (false) {
            //重複宣告一次函式f
            function f() {
                console.log("I am inside");
            }
        }

        f();
    }());

上面的程式碼片段,在ES5中執行會得到“Iam inside”, 但是在ES6中執行,則會得到“Iam outside”

const命令

const是用來宣告常量的。一旦宣告,其值就不能改變。

    const PI = 3.1415;
    console.log( PI ); //PI

    PI = 3;
    console.log( PI );  //3.1415

    const PI = 3.1;
    console.log( PI );  //3.1415

有一點需要我們注意的是,對常量的重複定義不會報錯,它只會默默的失敗。

const的作用域與let命令相同:即只在宣告所在的塊級作用域內有效。

    if(condition) {
        const MAX = 5;
    }

    // 常量MAX在此處不可見(或者說不可得)

此外,const常量也不可重複宣告。

    var message = "Hello!";
    let age = 25;

    //以下兩行都會報錯
    const message = "Goodbye!";
    const age = 30;

相關文章