var
单独不执行任务。它只会标记在整个var
发生的范围内使用变量名时,您所谈论的是局部变量而不是全局(有争议的缺省值)。当函数解析以及遍及范围保持var
被发现,所以你把它是无关紧要:
var a= 0;
function foo() {
a= 1;
return a;
var a;
}
var b= foo();
alert('global a='+a+', local a='+b);
结果global a= 0, local a= 1
:即使var
声明从未在foo()
执行过程中达成,将a
作为局部变量仍然有效。
因此,在同一范围内第二次申报var x
是完全多余的。但是,有时您仍然可以执行此操作,通常在同一个函数中重新使用局部变量名称进行第二次独立使用时。最常见的是:
for (var i= 0; i<onething.length; i++) {
...do some trivial loop...
}
for (var i= 0; i<anotherthing.length; i++) {
...do another trivial loop...
}
虽然你当然可以省略第二var
和工具,如jslint
会要求你这样做,它可能实际上不是一个好主意。
想象一下,您稍后更改或删除第一个循环,以便它不再声明i
为var
。现在剩下的第二个循环突然将含义从本地变为全局变量。如果你在更新第一个循环时没有注意到第二个循环对它有一个隐藏的依赖关系(并且你可能很好地没有注意到,鉴于眼睛如何将模式for(...=0 ; ...<...; ...++)
变成“哦,这只是一个标准迭代器”),你有一个微妙而烦人的调试问题。
你的问题的内容是关于一个具体的例子,下面已经得到了充分的回答。然而,我发现[这个答案](http://stackoverflow.com/a/12889928/983430)给类似的问题回答了一般情况(何时/为什么会重新声明一个JavaScript变量被使用?你的问题真的很好。 – 2012-10-31 09:05:57