Respuestas:
Sí, return
detiene la ejecución y sale de la función. return
siempre ** sale de su función inmediatamente, sin más ejecución si está dentro de un bucle for.
Se verifica fácilmente por usted mismo:
function returnMe() {
for (var i=0; i<2; i++) {
if (i === 1) return i;
}
}
alert(returnMe());
// 1
** Notas: Vea esta otra respuesta sobre el caso especial de try/catch/finally
y esta respuesta sobre cómo forEach loops tiene su propio alcance de función que no saldrá de la función que lo contiene.
return
todavía regresa de la iteración actual de la devolución de llamada de la función, en su propio ámbito, pero no se espera que se rompa del método de llamada completo forEach()
. Por lo tanto, no regresa del bucle en sí , sino que regresa de la devolución de llamada que ejecuta el bucle. En el ejemplo de código de la pregunta vinculada, la salida se 1,2,4,5
saltea 3
debido a la devolución.
return
siempre volverá del this
contexto actual .
break
y después return
.
En la mayoría de los casos (incluido este), return
saldrá inmediatamente. Sin embargo, si el retorno está en un try
bloque con un finally
bloque que lo acompaña , el finally
siempre se ejecuta y puede "anular" el return
en el 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
La return
declaración detiene un ciclo solo si está dentro de la función. De lo contrario, obtendrá este error:
Uncaught SyntaxError: Illegal return statement(…)
Este código saldrá del bucle después de la primera iteración en un 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á sobre 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
}
Sí, una vez return
que se ejecuta la instrucción, se abandona toda la función en ese mismo punto.
¿Imagínese lo que sucedería si no fuera así y continuara dando vueltas y ejecutando esa return
declaración cada vez? Invalidaría su significado de devolver un valor cuando lo piense.
La respuesta es sí, si escribe una declaración de devolución, los controles vuelven al método de llamada inmediatamente. Con la excepción de finalmente bloquear, que se ejecuta después de la declaración de devolución.
y finalmente también puede anular el valor que ha devuelto, si regresa dentro del bloque finalmente. ENLACE: aclaración Try-catch-finally-return
Definición de declaración de devolución según:
Documentos de Java:
una declaración de retorno se puede usar para ramificarse de un bloque de flujo de control y salir del método
Documentación de MSDN:
La declaración return finaliza la ejecución de una función y devuelve el control a la función que realiza la llamada. La ejecución se reanuda en la función de llamada en el punto inmediatamente posterior a la llamada.
Wikipedia:
Una instrucción return hace que la ejecución abandone la subrutina actual y se reanude en el punto del código inmediatamente después de donde se llamó a la subrutina, conocida como su dirección de retorno. La dirección de retorno se guarda, generalmente en la pila de llamadas del proceso, como parte de la operación de realizar la llamada de subrutina. Las declaraciones de retorno en muchos idiomas permiten que una función especifique un valor de retorno que se devolverá al código que llamó a la función.
"return" sale de la función pero si desea devolver grandes sumas de datos, puede almacenarlos en una matriz y luego devolverlos en lugar de intentar devolver cada dato 1 por 1 en el bucle.