为什么我的函数在遇到返回后执行剩余的代码(在两个循环内返回)

我不明白为什么这个函数会在应该调用 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(true) 替换 while(i >= 0) 函数会给出预期的输出(没有最后一个 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 ") 不执行?


慕运维8079593
浏览 181回答 2
2回答

慕丝7291255

您的while情况:while (i >= 0) {将永远不会在同一时间将是真实的return测试为真:if (i < 0) {&nbsp; &nbsp;&nbsp;&nbsp; return;}&nbsp; &nbsp;&nbsp;由于i在while循环顶部和i < 0测试之间没有改变,因此if永远不会实现。在最后一次迭代,i从0到-1刚刚结束之前递减while块,由于一个i的-1失败的while考验,没有进一步的迭代将运行(与if检查,return不会遇到)。如果您让while循环无限期地继续,直到if语句执行完毕,该函数确实会返回:function func(i) {&nbsp; while (true) {&nbsp; &nbsp; if (i < 0) {&nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; }&nbsp; &nbsp; document.write("inside loop, i is&nbsp; " + i);&nbsp; &nbsp; document.write("</br>");&nbsp; &nbsp; i--;&nbsp; } //end of while&nbsp;&nbsp; document.write("end of function, i is " + i);&nbsp; 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) {&nbsp;...return;在这两种情况下,该return声明被实际所遇到的,所以函数终止有预期。(在您的原始代码中,解释器永远不会遇到return,因为if永远不会实现)

呼唤远方

使用中断;相反或更好地仍然使用 return false; 像这样function func(i) {while (true) {if (i < 0) {&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; break;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; document.write("inside loop, i is&nbsp; " + i);&nbsp; &nbsp; document.write("</br>");i--;} //end of while&nbsp;document.write("end of function, i is " + i);document.write("</br>");}func(2);或function func(i) {while (true) {if (i < 0) {&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; document.write("inside loop, i is&nbsp; " + i);&nbsp; &nbsp; document.write("</br>");i--;} //end of while&nbsp;document.write("end of function, i is " + i);document.write("</br>");}func(2);我不知道第二个(返回 false),但第一个应该可以解决问题。我希望它有帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript