Да, есть третий случай, когда цепочка областей действия увеличивается (кроме let
расширения mozilla, которое упоминает Shog9 ), когда блок catch
оценивается:
Улов производства: улов
(Идентификатор) Блок оценивается как
следующим образом:
Пусть C будет параметром, который был передан этому производству.
Создайте новый объект как будто с помощью выражения new Object ().
Создать свойство в объекте Результат (2). Название недвижимости
Идентификатор, значение. значение и
атрибуты: {DontDelete}.
Добавить результат (2) в начало цепочки областей действия .
Оценка блока.
Снимите Результат (2) с передней части цепочки областей действия .
Результат возврата (5).
Таким образом, по сути, создается новый объект со свойством, названным как Идентификатор, передаваемому catch
, этот новый объект добавляется в цепочку областей действия, поэтому мы можем использовать этот идентификатор в блоке catch
.
try {
throw "error";
} catch (identifier) {
// `identifier` accessible here..
}
Но имейте в виду, что он только временно увеличивает текущую область, для введения идентификатора catch
, любая объявленная внутри переменная будет просто hoisted в верхней части, включая функция.