1. 程式人生 > 實用技巧 >[javascript] 變數提升

[javascript] 變數提升

摘自廖雪峰網站

JavaScript的函式定義有個特點,它會先掃描整個函式體的語句,把所有申明的變數“提升”到函式頂部

'use strict';

function foo() {
    var x = 'Hello, ' + y;
    console.log(x);
    var y = 'Bob';
}

foo();

雖然是strict模式,但語句var x = 'Hello, ' + y;並不報錯,原因是變數y在稍後申明瞭。但是console.log顯示Hello, undefined,說明變數y的值為undefined。這正是因為JavaScript引擎自動提升了變數y的宣告,但不會提升變數y的賦值

對於上述foo()函式,JavaScript引擎看到的程式碼相當於:

function foo() {
    var y; // 提升變數y的申明,此時y為undefined
    var x = 'Hello, ' + y;
    console.log(x);
    y = 'Bob';
}

由於JavaScript的這一怪異的“特性”,我們在函式內部定義變數時,請嚴格遵守“在函式內部首先申明所有變數”這一規則。最常見的做法是用一個var申明函式內部用到的所有變數:

function foo() {
    var
        x = 1, // x初始化為1
        y = x + 1
, // y初始化為2 z, i; // z和i為undefined // 其他語句: for (i=0; i<100; i++) { ... } }