jlint警告' var counter的重新声明'是必要的吗?
Is the JSlint warning `redeclaration of var counter` necessary?
我有一个几行长的脚本,我有很多标志类型,比如
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。
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 在原型上声明新方法
- 在ES6中,什么是新规范,“块级函数声明”的意思
- 在 javascript 中 for 循环的每次迭代中声明一个新的、唯一的变量是一种好方法
- 在 JavaScript 中,在声明对象的新键:值对时,引用对象的变量名与使用“this”之间是否存在差异
- 新的dijit.form.Button在声明时保持自动点击
- 声明新变量或在函数中使用引用
- 正则表达式在字面声明时有效,但在使用新运算符和变量值声明时无效
- 在方法中动态声明新的“类字段” - 是否是好的做法
- 声明与RESTful一起使用的模型定义”;新的“;在Angular中
- 如何将函数声明和新运算符组合为一条语句
- 在使用PHP和jQuery上传图像时声明新的formData()
- 如何在声明的对象中添加具有相同键名的新属性
- 在javascript中何时声明一个新的(匿名)函数
- 链接(重定向)以隐身方式打开,或在新选项卡中打开,或显式声明了新页面.刚点击时不工作
- 声明一个新函数与立即调用它
- 如何获取声明新对象的变量的名称
- 如何使用条件重新分配和声明新变量
- PostCSS:如何基于当前规则中的声明有条件地添加新规则
- 在JavaScript中声明一个新的子类作为原型方法是可以的吗?