我正在使用 JavaScript 中的 try-catch 块,并且遇到了一些我不完全理解的变量作用域行为。
我知道console.log(boo)
打印20
到控制台是因为变量已经用var
关键字声明了,因此它是功能范围的(即不是块范围到 catch 块)。
但是,我不明白为什么err
变量的范围也不与变量相同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)
})();
Run Code Online (Sandbox Code Playgroud)