首页 > 解决方案 > 为什么“错误”变量重新分配在 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)
})();

标签: javascripterror-handlingscopetry-catchvar

解决方案


我找到了答案。

这是因为在 catch 块完成执行后,异常 'identifier'(即上例中的 'err' 变量)不可用。这似乎是在 JS 中处理范围的一种特殊情况,并且在进行一些挖掘之前绝对是一个“陷阱”。

希望这对其他人有帮助!

文档在此处输入图像描述


推荐阅读