2 回答
TA贡献1859条经验 获得超6个赞
您的while情况:
while (i >= 0) {
将永远不会在同一时间将是真实的return测试为真:
if (i < 0) {
return;
}
由于i在while循环顶部和i < 0测试之间没有改变,因此if永远不会实现。在最后一次迭代,i从0到-1刚刚结束之前递减while块,由于一个i的-1失败的while考验,没有进一步的迭代将运行(与if检查,return不会遇到)。
如果您让while循环无限期地继续,直到if语句执行完毕,该函数确实会返回:
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 循环之后我将代码替换为:
return document.write("end of function, i is " + i);
document.write("end 2 of function, i is " + i);
和
如果我从 if 语句中取出 return 函数在调用 return 时停止:
while (i >= 0) {
...
return;
在这两种情况下,该return声明被实际所遇到的,所以函数终止有预期。(在您的原始代码中,解释器永远不会遇到return,因为if永远不会实现)
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),但第一个应该可以解决问题。我希望它有帮助。
添加回答
举报