Я работаю с блоками try-catch в JavaScript и столкнулся с некоторым изменяемым поведением области видимости, которое мне не совсем понятно.
Я понимаю, что console.log(boo)
выводит 20
на консоль, поскольку переменная была объявлена с ключевым словом var
и, следовательно, она функционально ограничена (то есть не относится к блоку в блоке catch).
Однако я не понимаю, почему переменная err
также не ограничена IIFE так же, как переменная boo
.Поэтому я не понимаю, почему это undefined
вне блока catch.
(function() {
try {
throw new Error();
} catch (err) {
var err = 10;
var boo = 20;
console.log(err); //'10' (as I expect)
}
// Why doesn’t this log '10' ???
console.log(err); // 'undefined' (but I expected '10')
console.log(boo); // '20' (as I expect)
})();