return 会停止循环吗?
Posted
技术标签:
【中文标题】return 会停止循环吗?【英文标题】:Does return stop a loop? 【发布时间】:2022-01-09 20:17:09 【问题描述】:假设我有一个这样的循环:
for (var i = 0; i < SomeArrayOfObject.length; i++)
if (SomeArray[i].SomeValue === SomeCondition)
var SomeVar = SomeArray[i].SomeProperty;
return SomeVar;
快速提问:return
本身会停止循环的执行吗?
【问题讨论】:
【参考方案1】:是的,return
停止执行并退出函数。 return
always** 立即退出其函数,如果它在 for 循环内则不再执行。
很容易自己验证:
function returnMe()
for (var i = 0; i < 2; i++)
if (i === 1) return i;
console.log(returnMe());
** 注意:请参阅this other answer 了解try/catch/finally
的特殊情况和this answer 了解forEach 循环如何拥有自己的函数范围不会跳出包含函数。
【讨论】:
> return 总是立即退出其函数,如果它在循环内则不再执行 ...unless it's a forEach loop @o-o 是真的。return
仍然从函数回调的当前迭代中返回,在它自己的范围内,但不会从整个调用方法 forEach()
中中断。所以它不是从循环本身返回,而是从循环执行的回调中返回。在链接问题的代码示例中,输出为 1,2,4,5
跳过 3
因为返回。
可能红线是return
总是会从当前this
上下文返回。
在数组上使用 forEach() 或 for() 来“可能”提前终止循环的替代方法是使用 some()。
我知道这对某些人来说是微不足道的,但这很好知道因为你不再需要break
然后return
。【参考方案2】:
在大多数情况下(包括这个),return
将立即退出。但是,如果返回位于带有 finally
块的 try
块中,则 finally
始终会执行并且可以“覆盖”try
中的 return
。
function foo()
try
for (var i = 0; i < 10; i++)
if (i % 3 == 0)
return i; // This executes once
finally
return 42; // But this still executes
console.log(foo()); // Prints 42
【讨论】:
惊人的解决方案,是的,在这种情况下,return 将始终执行,使用 try catch【参考方案3】:return
语句仅在循环位于函数内部时才停止循环(即它终止循环和函数)。否则,你会得到这个错误:
Uncaught SyntaxError: Illegal return statement(…)
要终止循环,您应该使用break
。
【讨论】:
【参考方案4】:此代码将在for of
循环中的第一次迭代后退出循环:
const objc = [ name: 1 , name: 2 , name: 3 ];
for (const iterator of objc)
if (iterator.name == 2)
return;
console.log(iterator.name);// 1
以下代码将跳转到条件并继续for of
循环:
const objc = [ name: 1 , name: 2 , name: 3 ];
for (const iterator of objc)
if (iterator.name == 2)
continue;
console.log(iterator.name); // 1 , 3
【讨论】:
谢谢,这对我有很大帮助,我正在使用节点,并且返回打破了我的 for,for each and for...of,继续像我预期的那样工作【参考方案5】:是的,一旦return
语句被执行,整个函数就会在此时退出。
想象一下,如果它不这样做并继续循环,每次都执行return
语句会发生什么?当您考虑它时,它会使返回值的含义无效。
【讨论】:
【参考方案6】:答案是肯定的,如果你写了return语句,控件会立即回到调用者方法。 除了 finally 块,它在 return 语句之后执行。
如果你在 finally 块内返回,finally 也可以覆盖你返回的值。 链接:Try-catch-finally-return clarification
返回语句定义如下:
Java 文档:
return 语句可用于分支出控制流块 并退出方法
MSDN 文档:
return 语句终止函数的执行和 将控制权返回给调用函数。执行恢复在 在调用之后立即调用函数。
***:
return 语句导致执行离开当前子例程 并在代码中的点之后立即恢复 子程序被调用,称为它的返回地址。退货地址 通常保存在进程的调用堆栈中,作为 子程序调用的操作。在许多返回语句 语言允许函数指定要传回的返回值 到调用函数的代码。
【讨论】:
您需要正确链接您使用的来源,并最好格式化引号。 现在看起来还好吗? 感谢语法修复,但仍然没有任何链接,而且您仍然没有使用块引用格式。【参考方案7】:“return”确实退出了函数,但是如果你想返回大量数据,你可以将它存储在一个数组中然后返回它,而不是尝试在循环中一个一个地返回每个数据。
【讨论】:
以上是关于return 会停止循环吗?的主要内容,如果未能解决你的问题,请参考以下文章
流程控制之 break ,continue,return的区别