У меня есть этот код:
(function() {
var ex;
try {
throw new Error('blah');
} catch(ex) {
console.log('ex i here:', ex);
}
console.log('ex out here:', ex);
return 'hi';
})()
Это журналы:
пример я здесь: Ошибка ('blah');
ex здесь: не определено
Почему это так? Я бы подумал, что из-за подъема ex
будет установлен за пределами этой области блока, поэтому он должен быть доступен в ex out here
.
Я ожидал, что это будет работать аналогично циклу for:
for (i=0; i<2; i++) {
}
console.log(i); // gives 2
catch(ex)
Этоex
предназначено для вас. - person Keith   schedule 28.03.2019ex
в catch - это не объявленная переменная, это параметр, который на самом деле затеняет вашуex
переменную - person Kaddath   schedule 28.03.2019try
Заявление: Предложениеcatch
предоставляет код обработки исключений. Когда предложениеcatch
перехватывает исключение, его параметр CatchParameter привязывается к этому исключению. - person Andreas   schedule 28.03.2019ex
, только объявляли его. Тот, что в улове, - это параметрex
, а не переменная, которую вы объявили - person Huangism   schedule 28.03.2019ex
— это две разные переменные: одна во внешней области видимости, а другая — параметр. - person Mark   schedule 28.03.2019