Dnes jsem se probudil a zkontroloval Slacka a v jednom z JavaScriptových kanálů jsem viděl malou trikovou otázku mého přítele Tomasze.
function f() {
try {
return 'A';
} finally {
return 'B';
}
}
f(); // ?
Nepoužívám finally
blok v try/catch
příkazy velmi často, takže jsem si nebyl jistý, jaká bude návratová hodnota pro tento úryvek. Ukázalo se, že finally
blok přechází vše podle MDN:
Pojďme se tedy podívat na několik příkladů:
function f() {
try {
return 'A';
} finally {
return 'B';
}
}
f(); // 'B'
// ***********************************************
function g() {
try {
throw new Error( 'Foo' );
} catch( e ) {
return 'A';
} finally {
return 'B';
}
}
g(); // 'B'
// ***********************************************
function h() {
try {
throw new Error( 'Foo' );
} finally {
return 'B';
}
}
h(); // 'B' (without throwing an exception)
// ***********************************************
function i() {
try {
throw new Error( 'Foo' );
} catch( e ) {
throw new Error( 'Bar' );
return 'A';
} finally {
return 'B';
}
}
i(); // 'B' (without throwing an exception)
finally
přepíše return
výpisy a také „chytá“ výjimky. Dobré vědět.;)