Finally o solo el código?
Compara los dos fragmentos de código.
-
El primero usa
finallypara ejecutar el código después detry..catch:try { trabajo trabajo } catch (err) { maneja errores } finally { limpiar el espacio de trabajo } -
El segundo fragmento coloca la limpieza justo después de
try..catch:try { trabajo trabajo } catch (err) { manejo de errores } limpiar el espacio de trabajo
Definitivamente necesitamos la limpieza después del trabajo, no importa si hubo un error o no.
¿Hay alguna ventaja aquà en usar finally o ambos fragmentos de código son iguales? Si existe tal ventaja, entonces da un ejemplo cuando sea importante.
La diferencia se hace evidente cuando miramos el código dentro de una función.
El comportamiento es diferente si hay un âsalto fueraâ de try..catch.
Por ejemplo, cuando hay un return en el interior de try..catch. La cláusula finally funciona en el caso de cualquier salida de try..catch, incluso a través de la declaración return: justo después de que try..catch haya terminado, pero antes de que el código de llamada obtenga el control.
function f() {
try {
alert('inicio');
return "resultado";
} catch (err) {
/// ...
} finally {
alert('limpieza!');
}
}
f(); // limpieza!
⦠O cuando hay un throw (lanzamiento de excepción), como aquÃ:
function f() {
try {
alert('inicio');
throw new Error("un error");
} catch (err) {
// ...
if("no puede manejar el error") {
throw err;
}
} finally {
alert('limpieza!')
}
}
f(); // limpieza!
Es âfinallyâ el que garantiza la limpieza aquÃ. Si acabamos de poner el código al final de f, no se ejecutará en estas situaciones.