在catch子句中声明e变量的正确方法是啥[关闭]

Posted

技术标签:

【中文标题】在catch子句中声明e变量的正确方法是啥[关闭]【英文标题】:What is the correct way to declare the e variable in a catch clause [closed]在catch子句中声明e变量的正确方法是什么[关闭] 【发布时间】:2021-06-28 20:21:41 【问题描述】:

当我没有声明 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,您无法删除此问题,因为其他人已投入时间和精力来回答它。如需更多信息,请访问帮助中心。 【参考方案1】:

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

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

【讨论】:

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

以上是关于在catch子句中声明e变量的正确方法是啥[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

处理在多个 for 循环中声明的变量的最惯用方法是啥? [关闭]

在 C++ 中声明实例变量而不构造它们的好方法是啥? [关闭]

使用uint8_t声明变量的正确方法[关闭]

在 C++ 和 C# 中使用 try/catch 的正确方法是啥? [复制]

在 Avro 中声明简单时间戳的正确方法是啥

MySQL中声明变量的正确形式是啥:declare vs @ vs set? [复制]