JavaScript catch参数已定义

问题描述

我试图了解为什么我得到以下错误,而不是解决方法。 将以下代码传递给JSLint或JSHint会产生错误“'err \”,该错误已被定义。
/*jslint white: true,devel: true,onevar: true,browser: true,undef: true,nomen: true,regexp: true,plusplus: true,windows: true,bitwise: true,newcap: true,strict: true,maxerr: 50,indent: 4 */
function xyzzy() {

    \"use strict\";

    try { /*Step 1*/ } catch (err) { }
    try { /*Step 2*/ } catch (err) { }

}
这里明显的假设是
catch
的行为或应该像函数一样。因此,
err
既不是全局变量,也不是
xyzzy
的局部变量,而是
catch
块的参数。 在浏览ECMA-262标准时,描述“ 5”语句的12.14节指示“ 1”子句采用绑定到异常的标识符。另外,“ 1”的语义产生规则指的是传递来的参数,该参数将标识符称为参数。 对于临时读者来说,这似乎暗示上述代码是有效的,并且棉绒工具可能存在错误。 甚至IntelliJ最严格的JavaScript代码检查分析也没有报告重新定义ѭ2的问题。 更令人担忧的是,如果这是一个可变的范围界定问题,那么人们可能会猜测ѭ2正在渗入全球空间,这带来了一系列其他问题,而应该事先声明它,例如:
/*jslint white: true,indent: 4 */
function xyzzy() {

    \"use strict\";
    var err;  // DECLARE err SO IT IS CERTAINLY LOCAL

    try { /*Step 1*/ } catch (err) { }
    try { /*Step 2*/ } catch (err) { }

}
但是,这现在仅在每个catch语句中导致大约
err
的两个错误,这使问题变得更糟,并可能引入可变阴影。 棉绒工具建议每个ѭ1块不仅引入其自身的词法范围,还引入一个新变量。这是不对的。 简单地使用
err1
err2
...来放置静态分析工具仅能掩盖症状,并且不会有助于编写更清晰的代码。 JavaScript Gurus:这是皮棉工具中的错误,JavaScript规范的阴暗角还是对这里发生的事情的根本误解? 更新:写给JSLint的作者道格拉斯·克罗克福德(Douglas Crockford),事实证明,出现此警告的理由很充分。请参阅下面的答案。     

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)