¿Return detiene un bucle?
Supongamos que tengo un bucle como este:
for (var i = 0; i < SomeArrayOfObject.length; i++) {
if (SomeArray[i].SomeValue === SomeCondition) {
var SomeVar = SomeArray[i].SomeProperty;
return SomeVar;
}
}
Pregunta rápida: ¿el return
detiene la ejecución del bucle en sí mismo?
6 answers
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.
Se verifica fácilmente por ti mismo:
function returnMe() {
for (var i=0; i<2; i++) {
if (i === 1) return i;
}
}
alert(returnMe());
// 1
Nota: Ver esta otra respuesta sobre el caso especial de try/catch/finally
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:06
En la mayoría de los casos (incluyendo este), return
saldrá inmediatamente. Sin embargo, si el retorno está en un bloque try
con un bloque finally
adjunto, 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-30 01:45:31
Sí, una vez que se ejecuta la instrucción return
, la función completa sale en ese mismo punto.
Imagínese lo que pasaría si no lo hiciera y continuara haciendo loop, y ejecutando esa return
declaración cada vez? Invalidaría su significado de devolver un valor cuando lo piensas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-30 01:42:40
La instrucción return
detiene un bucle solo si está dentro de la función. De lo contrario, obtendrá este error:
Uncaught SyntaxError: Illegal return statement(…)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-12 09:07:34
"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 pieza de datos 1 por 1 en el bucle.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-30 01:45:47
La respuesta es sí, si escribe la instrucción return los controles vuelven al método de llamada inmediatamente. Con la excepción de finally block, que se ejecuta después de la instrucción return.
Y finalmente también puede anular el valor que ha devuelto, si devuelve dentro de finally block. LINK: Try-catch-finally-return clarification
Devuelve la definición de la declaración según:
Java Docs:
Se puede usar una sentencia return para ramificar fuera de un bloque de flujo de control y salir del método
Documentación de MSDN:
La sentencia return termina la ejecución de una función y devuelve control a la función de llamada. Ejecución se reanuda en el función de llamada en el punto inmediatamente posterior a la llamada.
Wikipedia:
Una sentencia return hace que la ejecución deje la subrutina actual y reanudar en el punto en el código inmediatamente después de donde el la subrutina fue llamada, conocida como su dirección de retorno. La dirección del remitente se guarda, generalmente en la pila de llamadas del proceso, como parte del operación de hacer la llamada de subrutina. Declaraciones de retorno en muchos los idiomas permiten que una función especifique un valor de retorno que se devolverá al código que llamó a la función.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-01 02:43:53