JSHint没有认识到变量的“预期范围”

时间:2013-03-25 19:51:13

标签: javascript coding-style jshint

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

为什么它会引发以下错误,说多次声明i

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

funcscope设置为true或false无济于事。有没有办法抑制这个错误?

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

编辑: 我知道变量吊装。但我不赞成道格拉斯·克罗克福德关于在函数顶部声明所有var的观点。这使得代码更难以阅读,并且当您必须移动代码片段时更难以重构。 如果您在JSHint主页上阅读funcscope的文档,它还会讨论预期范围,这正是我所指的。我在这个背景下问我的问题)

2 个答案:

答案 0 :(得分:1)

你做错了。您的代码等同于编写:

var i;
var i; // duplicate!

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

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

答案 1 :(得分:-1)

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

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

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