假设我有一个这样的循环:
for (var i = 0; i < SomeArrayOfObject.length; i++) {
if (SomeArray[i].SomeValue === SomeCondition) {
var SomeVar = SomeArray[i].SomeProperty;
return SomeVar;
}
}
快速提问:return
是否会停止执行循环?
答案 0 :(得分:154)
是的,return
停止执行并退出该功能。 return
总是**立即退出其函数,如果它在for循环中则不再执行。
很容易为自己验证:
function returnMe() {
for (var i=0; i<2; i++) {
if (i === 1) return i;
}
}
alert(returnMe());
// 1
**注意:请参阅this other answer有关try/catch/finally
和this answer的特殊情况,了解forEach循环如何具有自己的函数范围,不会突破包含函数。
答案 1 :(得分:52)
在大多数个案(包括此案例)中,return
会立即退出。但是,如果返回位于带有try
块的finally
块中,则finally
始终会执行,并且可以“覆盖”return
中的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
答案 2 :(得分:6)
return
语句仅在函数内部停止循环。否则,您将收到此错误:
Uncaught SyntaxError: Illegal return statement(…)
答案 3 :(得分:5)
是的,一旦执行了return
语句,就会退出整个函数。
想象一下如果它没有并继续循环会发生什么,并且每次都执行return
语句?它会使你想到它时返回一个值的意思无效。
答案 4 :(得分:1)
答案是肯定的,如果你编写return语句,控件会立即回到调用方法。 除了finally块之外,它在return语句之后执行。
最后还可以覆盖你返回的值,如果你返回finally块内部。 链接:Try-catch-finally-return clarification
按照以下方式返回声明定义:
Java Docs:
return语句可用于分支出控制流程块 并退出方法
MSDN文档:
return语句终止函数的执行和 将控制权返回给调用函数。执行恢复 在通话结束后立即调用功能。
百科:
return语句导致执行离开当前子例程 并在紧接着之后的代码中恢复 子程序被调用,称为返回地址。退货地址 保存,通常在进程的调用堆栈中,作为一部分 进行子程序调用的操作。许多人都有退货声明 语言允许函数指定要传回的返回值 到调用函数的代码。
答案 5 :(得分:0)
“return”会退出该函数但是如果要返回大量数据,可以将其存储在数组中然后返回它,而不是尝试在循环中逐个返回每个数据。
答案 6 :(得分:0)
此代码将在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
}