在同一范围内声明两次Javascript变量 - 这是一个问题吗? [英] Declaring a Javascript variable twice in same scope - Is it an issue?
问题描述
以下代码是否会导致任何问题?:
Would the following code cause any issues?:
var a = 1;
var a = 2;
我的理解是javascript变量是在范围的开头声明的。例如:
My understanding is that javascript variables are declared at the start of the scope. For example:
var foo = 'a';
foo = 'b';
var bar = 'c';
处理为:
var foo;
var bar;
foo = 'a';
foo = 'b';
bar = 'c';
因此,我的初始代码段将成为:
Therefore would my initial code snippet become:
var a;
a = 1;
a = 2;
或者它会变成:
var a;
var a;
a = 1;
a = 2;
我知道在同一范围内两次声明一个javascript变量不是好习惯,但我'我对这样做的影响更感兴趣。
I understand that declaring a javascript variable twice in the same scope isn't good practice, but I'm more interested in the impact of doing this.
推荐答案
正如你所说,两次以上的同一个var,JavaScript会移动声明到范围的顶部然后你的代码会变成这样:
As you said, by twice of more the same var, JavaScript moves that declaration to the top of the scope and then your code would become like this:
var a;
a = 1;
a = 2;
因此,它不会给我们任何错误。
Therefore, it doesn't give us any error.
循环的同样的行为(它们的标题中没有本地范围),所以下面的代码非常常见:
This same behaviour occurs to for
loops (they doesn't have a local scope in their headers), so the code below is really common:
for (var i = 0; i < n; i++) {
// ...
}
for (var i = 0; i < m; i++) {
// ...
}
这就是为什么像 Douglas Crockford 这样的JavaScript大师建议程序员手动将这些声明移到顶端范围:
That's why JavaScript gurus like Douglas Crockford suggest programmers to manually move those declarations to the top of the scope:
var i; // declare here
for (i = 0; i < n; i++) { // initialize here...
// ...
}
for (i = 0; i < m; i++) { // ... and here
// ...
}
这篇关于在同一范围内声明两次Javascript变量 - 这是一个问题吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!