對於很多初學者來說,有一些常見的錯誤,比如:
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雖然是解釋執行的,但是在一個作用域裡宣告的變數在這個作用域裡只有一個指向,即便還沒有執行到正式宣告的哪一行,父級作用域的變數也已經因覆蓋無法訪問了