¿El retorno detiene un bucle?
Si tengo el siguiente for
bucle
for (var i = 0; i < SomeArrayOfObject.length; i++) {
if (SomeArray[i].SomeValue === SomeCondition) {
var SomeVar = SomeArray[i].SomeProperty;
return SomeVar;
}
}
¿ La return
declaración detiene la ejecución de la función?
Sí, las funciones siempre finalizan cuando su flujo de control cumple con una return
declaración.
El siguiente ejemplo demuestra cómo return
las declaraciones finalizan la ejecución de una función.
function returnMe() {
for (var i = 0; i < 2; i++) {
if (i === 1) return i;
}
}
console.log(returnMe());
Notas: consulte esta otra respuesta sobre el caso especial de try
– catch
– finally
y esta respuesta sobre cómo la forEach
devolución de llamada tiene su propio alcance de función, por lo que no saldrá de la función que la contiene.
En la mayoría de los casos (incluido éste), return
saldrá inmediatamente. Sin embargo, si la devolución está en un try
bloque con un finally
bloque que lo acompaña, finally
siempre se ejecuta y puede "anular" el return
en el archivo 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
Este código saldrá del bucle después de la primera iteración del for of
bucle:
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
return;
}
console.log(iterator.name);// 1
}
El siguiente código saltará a la condición y continuará en un for of
bucle:
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
continue;
}
console.log(iterator.name); // 1 , 3
}
La return
declaración detiene un bucle sólo si está dentro de la función (es decir, finaliza tanto el bucle como la función). De lo contrario, obtendrá este error:
Uncaught SyntaxError: Illegal return statement(…)
Para terminar un bucle debes usar break
.