Finally o solamente il codice?
Confronta i due frammenti di codice.
-
Il primo utilizza
finallyper eseguire il codice dopotry...catch:try { lavoro lavoro } catch (e) { gestione errori } finally { ripulisci lo spazio di lavoro } -
Il secondo posiziona la pulizia subito dopo il
try...catch:try { lavoro lavoro } catch (e) { gestione errori } ripulisci lo spazio di lavoro
Abbiamo decisamente bisogno di ripulire dopo il lavoro, sia che si verifichi un errore o meno.
Esiste un vantaggio nellâusare finally o ambedue i frammenti di codice sono equivalenti? Se câè qualche vantaggio, allora fornisci un esempio di quanto sia importante.
La differenza diventa ovvia quando inseriamo il codice allâinterno di una funzione.
Il comportamento è diverso se câè una âuscita anticipataâ dal try...catch.
Per esempio, quando câè un return allâinterno del try...catch. La clausola finally funziona qualunque sia la lcausa dellâuscita dal try...catch, anche tramite lâistruzione âreturnâ: appena il try...catch è terminato, ma prima che il codice richiamato prenda il controllo.
function f() {
try {
alert('start');
return "result";
} catch (err) {
/// ...
} finally {
alert('cleanup!');
}
}
f(); // cleanup!
â¦O quando si presenta un throw, come:
function f() {
try {
alert('start');
throw new Error("an error");
} catch (err) {
// ...
if("can't handle the error") {
throw err;
}
} finally {
alert('cleanup!')
}
}
f(); // cleanup!
à finally che garantisce la pulizia qui. Se inseriamo del codice alla fine di f, in queste situazioni, non verrà eseguito.