konečně v příkazech try/catch jde opravdu přes všechno

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.;)