Javascript JSHint不承认“不承认”;“预期范围”;对于变量

Javascript JSHint不承认“不承认”;“预期范围”;对于变量,javascript,coding-style,jshint,Javascript,Coding Style,Jshint,根据its中对funcscope选项的描述,JSHint似乎认识到在“预期范围”中声明的变量的效用,例如控制结构等(即使在JS中的函数中实际上只有一个范围) 那么,为什么它会抛出一个错误,说i被多次声明 if (condition) { var i = 1; // } else { var i = 2; // } 将funcscope设置为true或false都没有帮助。有没有办法抑制这个错误 (我喜欢使用“逻辑/预期”变量范围,并尽可能靠近所需的位置“定义”变

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

那么,为什么它会抛出一个错误,说
i
被多次声明

if (condition) {
    var i = 1;
    //
}
else {
    var i = 2;
    //
}
funcscope
设置为true或false都没有帮助。有没有办法抑制这个错误

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

编辑: 我知道变量提升。但我不同意Douglas Crockford关于在函数顶部声明所有
var
s的观点。这会使代码更难阅读,并且在需要移动代码片段时更难重构。
如果您阅读了JSHint主页上的
funcscope
文档,它还谈到了预期范围,这正是我所指的。我在这里问我的问题)

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

var i;
var i; // duplicate!

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

如您所见,您定义了两次
i
。我不相信有什么旗子可以压制这一点。

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

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

只需删除第二个var,因为您已经标记了var。您实际上不需要两次声明var。

我对变量提升非常了解,但我已尝试在原始帖子中澄清我的意思。我理解您的要求;我想说的是,对于预期的范围,您没有一个有效的用例。两次声明同一个变量不仅仅是编程风格的问题,你实际上是在误用语言。嗯,我有点明白你的意思。但进一步强调我的观点,我所做的实际问题是什么,撇开迂腐不谈。另外,如果我不这样做,我必须使用两个不同的名字,即使它们表达了相同的想法。或者在“更高”的范围内定义一个“公共”变量,这会产生我在原始帖子中提到的问题;这是一个无关紧要的问题。我想这是其中的一件事,对我来说,它是如此懒惰的编程,我不相信应该有一个标志。似乎JSHint同意。