en.javascript.info/1-js/7-js-misc/5-exception/1-finally-or-code-after/solution.md
2015-06-11 18:23:02 +03:00

1,010 B
Raw Blame History

Разница в поведении станет очевидной, если рассмотреть код внутри функции.

Поведение будет различным, если управление каким-то образом выпрыгнет из try..catch.

Например, finally сработает после return:

function f() {
  try {
    ...
*!*
    return result;
*/!*
  } catch (e) {
    ...
  } finally {
    очистить ресурсы
  }
}

Или же управление может выпрыгнуть из-за throw:

function f() {
  try {
    ...

  } catch (e) {
    ...
    if(не умею обрабатывать эту ошибку) {
*!*
      throw e;
*/!*
    }

  } finally {
    очистить ресурсы
  }
}

В этих случаях именно finally гарантирует выполнение кода до окончания работы f, просто код не будет вызван.