Answers:
是的,return
停止执行并退出功能。return
always **会立即退出其功能,如果它位于for循环中,则不会进一步执行。
它很容易为您自己验证:
function returnMe() {
for (var i=0; i<2; i++) {
if (i === 1) return i;
}
}
alert(returnMe());
// 1
**注:请参阅有关的特例的其他答案,try/catch/finally
以及有关forEach循环如何具有自己的功能范围的答案,不会脱离包含函数。
return
仍然会从函数回调的当前迭代(在其自己的范围内)返回,但是不会从整个调用方法中中断forEach()
。因此它不是从循环本身返回,而是从循环执行的回调中返回。在链接问题的代码示例中,由于返回,输出1,2,4,5
跳过了3
。
return
将始终从当前this
上下文返回。
break
如此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
该return
语句仅在函数内部时才停止循环。否则,您将收到此错误:
Uncaught SyntaxError: Illegal return statement(…)
该代码将在循环的第一次迭代后退出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语句,则控件将立即返回到调用方方法。除了finally块之外,该块在return语句之后执行。
如果您在finally块内部返回,finally也可以覆盖您返回的值。链接:尝试捕获最终返回说明
返回声明定义如下:
Java文件:
return语句可用于从控制流块中分支出来并退出方法
MSDN文档:
return语句终止函数的执行并将控制权返回给调用函数。在紧接调用之后的那一点,将在调用函数中恢复执行。
维基百科:
return语句使执行离开当前子例程,并在该子例程被调用后立即在代码中的点(即其返回地址)处继续执行。作为进行子例程调用的操作的一部分,通常将返回地址保存在进程的调用堆栈中。使用多种语言的Return语句允许函数指定返回值,该返回值将传递回调用该函数的代码。