为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕运维8079593 2021-08-20 18:58:44
我不明白为什么这个函数会在应该调用 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 ") 不执行?
查看完整描述

2 回答

?
慕丝7291255

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永远不会实现)


查看完整回答
反对 回复 2021-08-20
?
呼唤远方

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),但第一个应该可以解决问题。我希望它有帮助。


查看完整回答
反对 回复 2021-08-20
  • 2 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信