javascript - 为什么“错误”变量重新分配在 catch{} 块内没有功能范围?
问题描述
我正在使用 JavaScript 中的 try-catch 块,并且遇到了一些我不完全理解的变量作用域行为。
我知道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)
})();
解决方案
我找到了答案。
这是因为在 catch 块完成执行后,异常 'identifier'(即上例中的 'err' 变量)不可用。这似乎是在 JS 中处理范围的一种特殊情况,并且在进行一些挖掘之前绝对是一个“陷阱”。
希望这对其他人有帮助!
从文档:
推荐阅读
- coordinates - Amazon Textract 边界框坐标为特定块更改
- javascript - Javascript数组元素不写入innerHTML
- css - 考虑到网格布局中第一行的高度,我可以有一个全高的第二行吗?
- r - 如何将回归线添加到散点图
- python - 无法在 asyncio 中安排任何内容。(Python 3.7.x)
- git - 如何在 Visual Studio 中对 2 个不同的文件进行版本控制
- java - 弹簧靴休息日减量
- azure - 无法更改 Azure 帐户注册的付款信息中的“地区/国家”
- typescript - 在打字稿的分隔文件中实现方法类
- java - 如何以编程方式重命名包和类?