Nodejs與ES6系列1:變數宣告

帥蟲哥發表於2016-06-19

1、宣告變數

在JS當中一個變數的作用域(scope)是程式中定義這個變數的區域。變數分為兩類,全域性(global)的和區域性的。其中全域性變數的作用域是全域性性的,即在JavaScript程式碼中,它處處都有定義。而在函式之內宣告的變數,就只在函式體內部有定義。它們是區域性變數,作用域是區域性性的。函式的引數也是區域性變數,它們只在函式體內部有定義。

1.1 var變數宣告方式

在javascript中var關鍵字宣告變數具有兩個特點,第一變數提升(對變數的定義會預設提前至函式開始處),第二變數沒有塊作用域只有函式作用域。

(function scope() {
    var i = 10;
    (function innerscope() {
        console.log(i);
        var i = 10;
    })();
})();
=====
undefined

程式碼1.1.1中,第二個變數i的定義提前至函式innerscope開始位置,因此在console.log(i)的時候i並沒有賦值,因此輸出結果為undefined。

(function scope() {
    if(true){
        var i =10;
    }
    console.log(i);
})();
=====
10

程式碼1.1.2中,在if塊中定義的變數i在if塊外函式內依然可以使用,因此輸出結果10.

1.2 let宣告變數方式

在ES6的標準中,新引入了let關鍵字用於宣告變數,let關鍵字與var關鍵字不同在於let為塊作用域。 將1.1.2中程式碼定義變為let後,程式則不能執行。

程式碼 1.1.2

(function scope() {
    if(true){
        let i =10;
    }
    console.log(i);
})();
=====
i is not defined

1.3 const宣告變數方式

const用來宣告常量,一旦宣告,其值就不能改變,並且const定義的變數為塊作用域,比如1.3.1和1.3.2這樣編寫程式碼是會出錯的。

程式碼1.3.1

(function scope() {
    if(true){
        const pi =3.14;
    }
    console.log(pi);
})();

=====
pi is not defined

程式碼1.3.2

(function scope() {
    const pi = 3.14;
    pi=3;
    console.log(pi);
})();

相關文章