jlint警告' var counter的重新声明'是必要的吗?

Is the JSlint warning `redeclaration of var counter` necessary?

本文关键字:声明 新声明 var 警告 counter jlint      更新时间:2023-09-26

我有一个几行长的脚本,我有很多标志类型,比如

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++ 
 ...
};

它抱怨counter被用作更大语句的一部分,但我认为它在这里是完全可以接受的。然而,我在这里使用了两次counter,所以它警告redeclaration of var counter。我可以把var counter移到页面的顶部,但这可能会使counter的用途变得不那么清楚。是否有任何真正的问题使用var不止一次?我有一个delete counter声明,但它什么也没做。我应该把它改成delete window.counter

我不太确定你在这里的作用域,但如果它是全局作用域,那么delete counter确实什么也不做。也不需要delete window.counter,无论如何都是一样的(如果我们在全局作用域的浏览器环境中)。

如果你想重用这个变量——一个简单的赋值就可以了:

counter = 0

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

在相同的作用域中声明相同的变量两次绝对没有害处(除了稍微增加用户的浏览器在加载页面时必须下载的JS文件的大小)。编辑:

当然,有一个问题是为什么你要使用相同的名字…

不,没有问题。事实上,在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;
}

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

var carCounter = 0;
var nameCounter = 0;

也不会因为在两个不同的任务中使用了相同的变量而导致任何难以发现的bug。