引發這個問題思考的是一段js程式的運作結果:
var i = 0;
function a(){
for(i=0;i}
}
function b(){
for (i=0;ia();
}
return i;
}
var Result = b();
這段程式的運作結果是Result = 21;
從這段程式中我們可以看出,i在a函數回傳的時候值是20這是沒有問題的。
而在b函數回傳的時候,i的值是20還是21就值得討論了。
問題的本質即:先進行了判斷i
根據執行的結果可以看出,是先執行了i 的。
function a(){
for(i= 0;i// 沒有var i
//這裡的i就是全域變數所有人可以存取
}
}
function b(){
for(i=0;i//alert(i);//同理這裡的i也是全域變量,回傳0且只有一次回傳
a();//這個函數回傳是i=20
//當i=20 經過i 後i=21 那就不符合i}
return i;
}
var Result = b();
在此我們補完for迴圈的執行順序:
以下面程序為例
for(int i=0;i{
}
先執行i=0;i然後執行:i ,i直到最後一次i 後i >=10,此時循環結束。
即
語句1 在迴圈(程式碼區塊)開始前執行
語句2 定義執行迴圈(程式碼區塊)的條件
語句3 在循環(程式碼區塊)已被執行之後執行