- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白为什么这个函数会在应该调用 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;
如果 return 应该在它之前调用,为什么要写“end of function, i is -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 是 )没有被执行。为什么代码在第一次返回后继续执行,而不是在第二次返回后继续执行?
如果我从 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
在 while
的顶部之间没有变化循环和 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);
至于
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);
和
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/
案例研究如下, Tasks Table has an Order ID. 1 Task is belonged to an Order Table. An Order can have many ta
我有一个 fiddle ,如下所示,在位置 4(图片 4、图片 5、图片 6),我想要交叉淡入淡出(淡入/淡出) 要发生的图片库。目前该位置只显示图6。 https://jsfiddle.net/k0
我是一名优秀的程序员,十分优秀!