js作用域的常見錯誤

lily000000發表於2017-11-03

對於很多初學者來說,有一些常見的錯誤,比如:

for(var i = 0; i < 3; i++){
    var result = [];
    result.push(i);
}
console.log(result);//有的初學者以為這裡會列印 [0,1,2],實際上會列印[2],因為result是在for裡面被定義的, 每次迴圈都被重新初始化複製程式碼

如果我們使用let

for(var i = 0; i < 3; i++){
    let result = [];
    result.push(i);
}
console.log(result); //Uncaught ReferenceError: x is not defined,因為result是在for裡面被定義的, 外面訪問不到。複製程式碼

再比如:

var result = [];
for(var i = 0; i < 3; i++){
    result.push(i);
    console.log(result); //有的童靴以為這裡會在迴圈結束後列印,實際上每一次迴圈console.log都會被執行
}
/**
 * 上面這些程式碼執行的結果是:
 * [0]
 * [0,1]
 * [0,1,2]
 **/複製程式碼

也有一種情況會是初學者會犯的錯誤

var x = 0;
function fun(){
    console.log(x);//undefined
    var x = 1;
    x++;
}

fun();複製程式碼

我們想先用一下全域性變數x,然後再在子作用域裡宣告一個重名的區域性變數x。結果我們會發現console.log()列印出的是
undefined。
因為js雖然是解釋執行的,但是在一個作用域裡宣告的變數在這個作用域裡只有一個指向,即便還沒有執行到正式宣告的哪一行,父級作用域的變數也已經因覆蓋無法訪問了

相關文章