Skip to content

Latest commit

 

History

History
47 lines (38 loc) · 1.19 KB

File metadata and controls

47 lines (38 loc) · 1.19 KB

Jeśli umieścimy pierwszy fragment w środku funkcji, szybko zauważymy różnicę.

Występuje ona w momencie wyjścia z instrukcji try...catch.

Spójrzmy na przykład użycia return w środku try...catch. Trzeci blok finally wykona się dla każdego możliwego wyjścia z dwóch dostępnych bloków instrukcji try...catch...finally. Nawet jeśli użyjemy instrukcji return.

function f() {
  try {
    alert('spróbuj wyświetlić okno dialogowe');
*!*
    return "opuść blok try";
*/!*
  } catch (e) {
    /// ...
  } finally {
    alert('sfinalizuj instrukcję');
  }
}

f(); // sfinalizuj instrukcję

lub kiedy używamy operatora throw, jak w przykładzie poniżej:

function f() {
  try {
    alert('spróbuj wyświetlić okno dialogowe');
    throw new Error("błąd!");
  } catch (e) {
    // ...
    if("nie interesują mnie błędy") {
*!*
      throw e;
*/!*
    }

  } finally {
    alert('sfinalizuj instrukcję')
  }
}

f(); // sfinalizuj instrukcję

To blok finally zagwarantuje sfinalizowanie instrukcji. Gdy użyjemy zawartości trzeciego bloku na zewnątrz, tuż przed końcem funkcji f, nie zostanie to wykonane w przedstawionych scenariuszach.