javascript - 为什么我的函数遇到return后会执行剩下的代码(return inside of two loops)

标签 javascript function loops if-statement return

我不明白为什么这个函数会在应该调用 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; 
  1. 如果 return 应该在它之前调用,为什么要写“end of function, i is -1”这一行?

  2. 如果我用 while(true) 替换 while(i >= 0),该函数会给出预期的输出(没有最后一个 document.write)。这是为什么?

  3. 如果我将 while 循环之后的代码替换为:

    return document.write("end of function, i is " + i);
    document.write("end 2 of function, i is " + i);
    

最后一行代码(函数的结尾 2,i 是 )没有被执行。为什么代码在第一次返回后继续执行,而不是在第二次返回后继续执行?

  1. 如果我从 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;
}    

iwhile 的顶部之间没有变化循环和 i < 0测试,if永远不会实现。在最后一次迭代中,i将在 while 结束之前从 0 递减到 -1 block ,并且由于 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);

至于

  1. If after the while loop I replace the code with:

    return document.write("end of function, i is " + i);
    document.write("end 2 of function, i is " + i);
    

  1. If I take the return out of the if statement the function stops when return is called:

    while (i >= 0) { 
    ...
    return;
    

在这两种情况下,return语句实际遇到的,所以函数按预期在那里终止。 (在您的原始代码中,解释器永远不会运行 return ,因为 if 永远不会实现)

关于javascript - 为什么我的函数遇到return后会执行剩下的代码(return inside of two loops),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57192916/

相关文章:

javascript - 根据其他选择值隐藏选择中的选项

使用指针引用调用函数而不分配地址

c - 在 C 语言中,给返回指针的函数赋值有什么作用? *功能=值

javascript - 7 行,包含数组中的值

javascript - 数组递归起点终点

python - 打印两个列表中都不存在的项目

javascript - 从 Web 到打印的 SVG

javascript - 以动态形式yii2添加新行,在新行中,js不起作用

javascript - 更改对象的 __proto__ 值是否被认为是不好的做法?

PHP 数字格式作为输出