假设我有一个这样的循环:
for (var i = 0; i < SomeArrayOfObject.length; i++) {
if (SomeArray[i].SomeValue === SomeCondition) {
var SomeVar = SomeArray[i].SomeProperty;
return SomeVar;
}
}
快速提问:是否return
停止执行循环本身?
假设我有一个这样的循环:
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
始终执行并可以“覆盖” 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
此代码将在循环中的第一次迭代后退出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
}
该return
语句仅在它位于函数内部时才停止循环(即它终止循环和函数)。否则,您将收到此错误:
Uncaught SyntaxError: Illegal return statement(…)
要终止循环,您应该使用break
.
是的,一旦return
执行了语句,整个函数就会在此时退出。
想象一下,如果它不这样做并继续循环并return
每次执行该语句会发生什么?当您考虑它时,它会使返回值的含义无效。
答案是肯定的,如果您编写 return 语句,控件将立即返回到调用方方法。除了 finally 块之外,它在 return 语句之后执行。
如果您在 finally 块内返回,finally 也可以覆盖您返回的值。LINK: Try-catch-finally-return 澄清
返回语句定义如下:
Java 文档:
return 语句可用于分支出控制流块并退出方法
MSDN 文档:
return 语句终止函数的执行并将控制权返回给调用函数。调用函数在调用之后的点处继续执行。
维基百科:
return 语句会导致执行离开当前子例程,并在代码中调用子例程之后的位置(称为其返回地址)处继续执行。返回地址通常保存在进程的调用堆栈中,作为进行子例程调用的操作的一部分。许多语言中的返回语句允许函数指定返回值以传回调用该函数的代码。
“return”确实退出了函数,但如果你想返回大量数据,你可以将它存储在一个数组中,然后返回它,而不是尝试在循环中逐个返回每条数据。