0

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

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

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

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

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

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

4

2 回答 2

1

你这样做是不对的。您的代码相当于编写:

var i;
var i; // duplicate!

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

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

于 2013-03-25T19:55:32.217 回答
-1

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

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

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

于 2014-04-07T14:19:14.760 回答