是否需要JSlint警告`var counterc的重新声明?

时间:2011-10-28 19:22:37

标签: javascript jslint

我有一个多行的脚本,我有很多类似的标志类型

var counter = 0;
var carFlags = {
 Audio : counter++ ,
 Bentley : counter++ ,
 Chrysler : counter++
 Datsun : counter++ 
 ...
};

稍后如果我以相同的方式创建一个新的标志对象

var counter = 0;
var nameFlags = {
 Ashley : counter++ ,
 Bronwyn : counter++ ,
 Catherine : counter++
 DakotaFanning : counter++ 
 ...
};

它抱怨说计数器被用作更大声明的一部分,但我认为这是完全可以接受的。但是,我在这里使用了两次计数器,所以它警告redeclaration of var counter。我可以将var counter移到页面顶部,但这可能会使counter的用途变得不那么明确。使用var不止一次有什么问题吗?我有一个delete counter声明,但它没有做任何事情。我应该将其更改为delete window.counter吗?

3 个答案:

答案 0 :(得分:3)

我对你的范围不太确定,但如果它是全球范围,则delete counter确实无能为力。也不需要delete window.counter无论如何都是相同的(如果我们在全球范围内的浏览器环境中)。

如果您希望重复使用该变量,则可以执行简单的分配:

counter = 0

我相信,JSLint抱怨的原因是警告你,你可能打算重新使用计数器并意外输入var(不止一次发生在我身上)。

两次声明相同的变量绝对没有坏处(除了在加载页面时用户的浏览器必须下载的JS文件的大小稍微增加)在同一范围内

编辑:

当然,有一个问题,为什么你会使用相同的名字......

答案 1 :(得分:1)

不,没有问题。事实上,在Javascript中,无论如何,变量声明(带有var)会自动提升到其封闭范围的顶部。例如,以下内容:

var n = 5;
if (n < 3) {
   var q = 2;
   var n = 4;
}

相当于:

var q, n=5;
if (n < 3) {
   q = 2;
   n = 4;
}

答案 2 :(得分:1)

给他们唯一的名字,你就不会有任何问题。

var carCounter = 0;
var nameCounter = 0;

你也不会因为你在两个不同的任务中使用相同的变量而找到任何难以找到的错误。