javascript - 为什么我的函数在遇到返回后执行剩余代码(在两个循环内返回)
问题描述
我不明白为什么这个函数会在应该调用 return 语句之后运行剩余的代码:
function func(i) {
while (i >= 0) {
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);
输出:
inside loop, i is 2;
inside loop, i is 1;
inside loop, i is 0;
end of function, i is -1;
我期待:
inside loop, i is 2;
inside loop, i is 1;
inside loop, i is 0;
如果应该在它之前调用返回,为什么要写“函数结束,i 是 -1”这一行?
如果我将 while(i >= 0) 替换为 while(true),则该函数会给出预期的输出(没有最后一个 document.write)。这是为什么?
如果我将 while 循环后的代码替换为:
return document.write("end of function, i is " + i); document.write("end 2 of function, i is " + i);
最后一个代码行(函数的第 2 行, i is )未执行。为什么代码在第一次返回后继续执行,而不是在第二次返回后继续执行?
如果我从 if 语句中取出 return,则在调用 return 时函数停止:
while (i >= 0) { document.write("inside loop, i is " + i); document.write("</br>"); i--; return; }
输出是:
inside loop, i is 2
为什么最后一个 document.write ("end of function, i is ") 在这种情况下不执行?
解决方案
你的while
情况:
while (i >= 0) {
永远不会在测试为真的同时return
为真:
if (i < 0) {
return;
}
由于在循环顶部和测试i
之间没有改变,因此永远不会实现。在最后一次迭代中,将在块结束之前从 0 递减到 -1 ,并且由于 an测试失败,因此不会运行进一步的迭代(并且不会遇到检查)。while
i < 0
if
i
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