2 回答

TA貢獻1859條經驗 獲得超6個贊
您的while情況:
while (i >= 0) {
將永遠不會在同一時間將是真實的return測試為真:
if (i < 0) {
return;
}
由于i在while循環(huán)頂部和i < 0測試之間沒有改變,因此if永遠不會實現(xiàn)。在最后一次迭代,i從0到-1剛剛結束之前遞減while塊,由于一個i的-1失敗的while考驗,沒有進一步的迭代將運行(與if檢查,return不會遇到)。
如果您讓while循環(huán)無限期地繼續(xù),直到if語句執(zhí)行完畢,該函數(shù)確實會返回:
function func(i) {
while (true) {
if (i < 0) {
return;
}
document.write("inside loop, i is " + i);
document.write("</br>");
i--;
} //end of while
document.write("end of function, i is " + i);
document.write("</br>");
}
func(2);
至于
如果在 while 循環(huán)之后我將代碼替換為:
return document.write("end of function, i is " + i);
document.write("end 2 of function, i is " + i);
和
如果我從 if 語句中取出 return 函數(shù)在調用 return 時停止:
while (i >= 0) {
...
return;
在這兩種情況下,該return聲明被實際所遇到的,所以函數(shù)終止有預期。(在您的原始代碼中,解釋器永遠不會遇到return,因為if永遠不會實現(xiàn))

TA貢獻1856條經驗 獲得超11個贊
使用中斷;相反或更好地仍然使用 return false; 像這樣
function func(i) {
while (true) {
if (i < 0) {
break;
}
document.write("inside loop, i is " + i);
document.write("</br>");
i--;
} //end of while
document.write("end of function, i is " + i);
document.write("</br>");
}
func(2);
或
function func(i) {
while (true) {
if (i < 0) {
return false;
}
document.write("inside loop, i is " + i);
document.write("</br>");
i--;
} //end of while
document.write("end of function, i is " + i);
document.write("</br>");
}
func(2);
我不知道第二個(返回 false),但第一個應該可以解決問題。我希望它有幫助。
添加回答
舉報