如果我有下面的for循环


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

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

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


当前回答

在大多数情况下(包括本例),return将立即退出。但是,如果返回值是在一个try块中,并且附带了一个finally块,那么finally总是会执行,并且可以“覆盖”try中的返回值。

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语句仅当它在函数内部时才会停止循环(即它同时终止循环和函数)。否则,你会得到这样的错误:

Uncaught SyntaxError: Illegal return statement(…)

要终止循环,应该使用break。

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

在大多数情况下(包括本例),return将立即退出。但是,如果返回值是在一个try块中,并且附带了一个finally块,那么finally总是会执行,并且可以“覆盖”try中的返回值。

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语句被执行,整个函数就会在那一刻退出。

想象一下,如果它不这样做,继续循环,每次执行return语句会发生什么?它会使返回值的意义失效。

答案是肯定的,如果你写return语句,控件会立即回到调用者方法。 除了finally块的异常,它在return语句之后执行。

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

返回语句定义如下:

Java文档:

返回语句可用于分支出控制流块 然后退出该方法

MSDN文档:

return语句终止函数和的执行 将控制权返回给调用函数。执行将在 在调用之后的点上调用函数。

维基百科:

return语句导致执行离开当前子例程 然后在代码中的点上继续 子例程被调用,称为它的返回地址。寄信人地址 通常保存在进程的调用堆栈上,作为 进行子例程调用的操作。返回语句 语言允许函数指定要传递回去的返回值 到调用该函数的代码。