return 会停止循环吗?

Does return stop a loop?

提问人:frenchie 提问时间:7/30/2012 最后编辑:JΛYDΞVfrenchie 更新时间:1/31/2023 访问量:289170

问:

如果我有以下循环for


    for (var i = 0; i < SomeArrayOfObject.length; i++) {
    
      if (SomeArray[i].SomeValue === SomeCondition) {

         var SomeVar = SomeArray[i].SomeProperty;
         return SomeVar;
      }
    }

该语句是否会停止函数的执行?return

JavaScript 循环 返回

评论


答:

331赞 Michael Berkowski 7/30/2012 #1

是的,每当函数的控制流遇到语句时,函数总是结束。return

下面的示例演示语句如何结束函数的执行。return

function returnMe() {
  for (var i = 0; i < 2; i++) {
    if (i === 1) return i;
  }
}

console.log(returnMe());

注意:请参阅另一个关于 – 的特殊情况的答案,以及这个关于回调如何具有自己的函数范围的答案,因此它不会脱离包含函数。trycatchfinallyforEach

评论

54赞 o-o 6/27/2016
>返回总是立即退出其函数,如果它在循环中,则不会进一步执行......除非它是 forEach 循环
15赞 Michael Berkowski 6/27/2016
@o-o:有点对。 仍然从函数回调的当前迭代中返回,在其自己的范围内,但预计不会从整个调用方法中断。因此,它不是从循环本身返回的,而是从循环执行的回调返回的。在链接问题的代码示例中,由于返回,输出将跳过 。returnforEach()1,2,4,53
1赞 o-o 6/28/2016
也许红线是总是会从当前上下文返回。returnthis
1赞 Anjan Biswas 7/4/2018
在数组上使用 forEach() 或 for() 进行“潜在”早期循环终止的替代方法是使用 some()。
2赞 NoName 10/18/2019
我知道这对某些人来说是微不足道的,但这很好知道,因为你不再需要然后.breakreturn
6赞 Keldon Alleyne 7/30/2012 #2

是的,一旦执行了语句,整个函数就会在此时退出。return

试想一下,如果它不这样做并继续循环,并且每次都执行该语句,会发生什么?当你考虑它时,它会使它返回一个值的意义无效。return

88赞 John Girata 7/30/2012 #3

在大多数情况下(包括这种情况),将立即退出。但是,如果返回值位于带有随附块的块中,则 始终执行并可以“覆盖”.returntryfinallyfinallyreturntry

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

评论

1赞 Arghya Chowdhury 8/12/2020
惊人的解决方案,是的,在这种情况下,返回将始终执行,请使用 try catch
0赞 Brendon McBain 7/30/2012 #4

“return”确实退出了该函数,但如果你想返回大量数据,你可以将其存储在一个数组中,然后返回它,而不是尝试在循环中逐个返回每条数据。

17赞 Damjan Pavlica 3/10/2016 #5

仅当循环位于函数内部时,该语句才会停止循环(即它同时终止循环和函数)。否则,您将收到以下错误:return

Uncaught SyntaxError: Illegal return statement(…)

要终止循环,应使用 .break

2赞 user1179299 5/30/2017 #6

答案是肯定的,如果编写 return 语句,控件会立即返回到调用方方法。 但 finally 块除外,该块在 return 语句之后执行。

如果您在 finally 块内返回,finally 也可以覆盖您返回的值。 链接:try-catch-finally-return 澄清

Return 语句定义如下:

Java 文档:

return 语句可用于分支出控制流块 并退出该方法

MSDN 文档:

return 语句终止函数的执行,并且 将控制权返回给调用函数。执行在 在调用后立即调用函数。

维基百科:

return 语句导致执行离开当前子例程 并在代码中的点上恢复,紧接在 子例程被调用,称为其返回地址。退货地址 通常保存在进程的调用堆栈上,作为 进行子例程调用的操作。许多 return 语句 语言允许函数指定要传回的返回值 添加到调用该函数的代码。

评论

0赞 Nathan Tuggy 5/30/2017
您需要正确链接您使用的来源,并且最好也格式化引号。
0赞 user1179299 5/31/2017
现在看起来还好吗?
0赞 Nathan Tuggy 5/31/2017
我很欣赏语法修复,但仍然没有任何链接,而且您仍然没有使用块引用格式。
26赞 PersianIronwood 4/16/2019 #7

此代码将在循环中的第一次迭代后退出循环: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
}

评论

0赞 veroneseComS 1/28/2020
谢谢,这对我有很大帮助,我正在使用节点,并且返回正在破坏我的 for,for each and for...的,继续像我预期的那样工作