Javascript 是否需要JSlint警告“重新声明var计数器”?
我有一个脚本,有几行长,我有很多这样的标志类型Javascript 是否需要JSlint警告“重新声明var计数器”?,javascript,jslint,Javascript,Jslint,我有一个脚本,有几行长,我有很多这样的标志类型 var counter = 0; var carFlags = { Audio : counter++ , Bentley : counter++ , Chrysler : counter++ Datsun : counter++ ... }; 以后如果我用同样的方法创建一个新的flag对象 var counter = 0; var nameFlags = { Ashley : counter++ , Bronwyn : coun
var counter = 0;
var carFlags = {
Audio : counter++ ,
Bentley : counter++ ,
Chrysler : counter++
Datsun : counter++
...
};
以后如果我用同样的方法创建一个新的flag对象
var counter = 0;
var nameFlags = {
Ashley : counter++ ,
Bronwyn : counter++ ,
Catherine : counter++
DakotaFanning : counter++
...
};
它抱怨说计数器被用作更大声明的一部分,但我认为它在这里是完全可以接受的。然而,我在这里已经使用了两次计数器,因此它会警告重新声明var计数器。我可以将
var counter
移动到页面顶部,但这可能会使counter
的用途变得不太清楚。多次使用var是否存在实际问题?我有一个delete counter
语句,但它什么也没做。我是否应该将其更改为删除窗口。计数器?不,没有问题。事实上,在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;
}
不,没问题。事实上,在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;
您也不会因为在两个不同的任务中使用了相同的变量而导致任何难以发现的错误。给它们唯一的名称,您就不会有任何问题
var carCounter = 0;
var nameCounter = 0;
您也不会因为在两个不同的任务中使用了相同的变量而导致任何难以发现的错误。我不太确定您在这里的范围,但如果它是全局范围,那么
删除计数器实际上什么也做不了。也不需要删除window.counter
,这将是相同的事情(如果我们在全局范围内的浏览器环境中)
如果您希望重复使用变量-简单赋值即可:
counter = 0
我认为,JSLint抱怨的原因是警告您,您可能打算重复使用计数器,并意外地键入了var
(我不止一次遇到过)
在同一范围内两次声明同一变量(除了稍微增加用户浏览器在加载页面时必须下载的JS文件的大小)绝对没有坏处
编辑:
当然,有一个问题是,为什么你会使用相同的名字 我不太确定您在这里的作用域,但如果它是全局作用域,那么删除计数器
实际上什么也做不了。也不需要删除window.counter
,这将是相同的事情(如果我们在全局范围内的浏览器环境中)
如果您希望重复使用变量-简单赋值即可:
counter = 0
我认为,JSLint抱怨的原因是警告您,您可能打算重复使用计数器,并意外地键入了var
(我不止一次遇到过)
在同一范围内两次声明同一变量(除了稍微增加用户浏览器在加载页面时必须下载的JS文件的大小)绝对没有坏处
编辑:
当然,有一个问题是,为什么你会使用相同的名字 好建议。但是,如果有两个(未列出的)for循环,您是否应该命名一个var i
,另一个var j
?好建议。但是,如果有两个(未列出的)for循环,那么应该命名其中一个var i
,另一个var j
?这样if语句的then分支就不会构成变量范围(如在C/C++)了吗?@stefanmayewsky正确,JavaScript中的变量不会像if语句的then分支那样被限定在代码块的范围内。JavaScript变量的作用域仅限于函数或全局作用域。因此if语句的then分支不构成变量作用域(如在C/C++中)?@StefanMajewsky正确,JavaScript中的变量的作用域不限于代码块,如if语句的then分支。JavaScript变量的作用域仅限于函数或全局作用域。