【问题标题】:What is the correct way to declare the e variable in a catch clause [closed]在catch子句中声明e变量的正确方法是什么[关闭]
【发布时间】:2023-08-22 16:03:02
【问题描述】:

当我没有声明 catch 用来存储错误的变量时,JSHint 给我以下错误

function foo (){
    try{
        let a = 0/0;
    } catch (e){
        console.log (e);
    }
}

error| 'e' is not defined

当我定义它时,我会得到这个错误

function foo (){
    let e;

    try{
        let a = 0/0;
    } catch (e){
        console.log (e);
    }
}

error| Value of 'e' may be overwritten in IE8 and earlier

是否有声明e 的最佳实践方式?如果没有,我该如何抑制这个 JSHint 错误?

【问题讨论】:

  • 我将您的代码粘贴到 jshint.com,它没有抱怨 e
  • @Barmar 这是我的错,在catch 之外声明了一个e,但我没有注意到它。我将把它留给 * 大神来决定是否关闭这个问题
  • 如果这不是您有疑问的代码,那么您应该删除它。
  • 删除问题,因为它不是真正的问题,只是一个错字。
  • @Barmar,您无法删除此问题,因为其他人已投入时间和精力来回答它。如需更多信息,请访问帮助中心。

标签: javascript try-catch jslint jshint variable-declaration


【解决方案1】:

MDN try...catch 文档中描述的exception_var 不需要初始化。此变量的处理方式类似于函数的参数:catch(e) 中的定义创建了引用。

JSHint 是正确的,因为在 try/catch 语句之外初始化 exception_var(许多开发人员将其用作 e/err)可能会导致不需要的行为。

【讨论】:

  • 他在哪里初始化第一个sn-p中try/catch之外的变量?
  • 抱歉,这是为了解决底部的示例。这个问题可能需要进一步澄清:为 JSHint 启用了哪些选项,使用的 JSHint 版本等。
  • 我会接受这是一个部分答案(请参阅我上面关于导致此问题的原始错误的评论)