【问题标题】:JSHint not recognizing "intended scopes" for variablesJSHint 无法识别变量的“预期范围”
【发布时间】:2013-03-25 19:51:13
【问题描述】:

根据其documentation 中对funcscope 选项的描述,JSHint 似乎认识到在“预期范围”中声明的变量的效用,例如控制结构等(即使实际上在 JS 中的函数内只有一个作用域)。

那么,为什么它会抛出以下错误,说i 被声明了多次?

if (condition) {
    var i = 1;
    //
}
else {
    var i = 2;
    //
}

funcscope 设置为true 或false 没有帮助。有没有办法抑制这个错误?

(我喜欢“逻辑/预期”变量范围,以及“定义”变量尽可能接近需要的位置。在需要移动代码块时帮助我。

编辑: 我知道可变提升。但我不同意 Douglas Crockford 关于在函数顶部声明所有 vars 的观点。这使得代码更难阅读,并且当您必须移动代码 sn-ps 时更难重构。 如果您在 JSHint 主页阅读 funcscope 的文档,它还谈到了预期范围,这也正是我所指的。我在这种情况下问我的问题)

【问题讨论】:

    标签: javascript coding-style jshint


    【解决方案1】:

    你做错了。你的代码相当于写:

    var i;
    var i; // duplicate!
    
    if (condition) {
        i = 1;
    } else {
        i = 2;
    }
    

    如您所见,您定义了两次i。我不相信有一个旗帜可以压制它。

    【讨论】:

    • 我对变量提升非常了解,但我试图澄清我在原帖中的意思。
    • 我明白你在问什么;我的意思是您没有预期范围的有效用例。两次声明同一个变量不仅仅是编程风格的问题,你实际上是在滥用语言。
    • 嗯,我有点明白你在说什么。但是为了进一步强调我的观点,我正在做的事情的实际问题是什么,除了迂腐。 OTH,如果我不这样做,即使它们表达相同的想法,我也必须使用两个不同的名称。或者在“更高”范围内定义一个“通用”变量,这会产生我在原始帖子中提到的问题。
    • 我想你说得有道理;这是一个无害的问题。我想这是其中之一,对我来说,这是一种懒惰的编程,我不相信它应该成为它的标志。似乎 JSHint 同意了。
    【解决方案2】:

    如果你不想和道格拉斯一起去,那怎么样

    if (condition) {
        var i = 1;
        //
    }
    else {
        i = 2;
        //
    }
    

    只需删除第二个 var,因为您已经贴上了 var。你真的不需要声明 var 两次。

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      相关资源
      最近更新 更多