Cur*_*urt 30 javascript variables scope
以下代码会导致任何问题吗?:
var a = 1;
var a = 2;
Run Code Online (Sandbox Code Playgroud)
我的理解是javascript变量是在范围的开头声明的.例如:
var foo = 'a';
foo = 'b';
var bar = 'c';
Run Code Online (Sandbox Code Playgroud)
处理为:
var foo;
var bar;
foo = 'a';
foo = 'b';
bar = 'c';
Run Code Online (Sandbox Code Playgroud)
因此,我的初始代码段将成为:
var a;
a = 1;
a = 2;
Run Code Online (Sandbox Code Playgroud)
或者它会成为:
var a;
var a;
a = 1;
a = 2;
Run Code Online (Sandbox Code Playgroud)
我知道在同一范围内两次声明一个javascript变量并不是一个好习惯,但我对这样做的影响更感兴趣.
Dan*_*nte 35
正如你所说,通过两倍多相同的var,JavaScript将该声明移到范围的顶部,然后你的代码将变成这样:
var a;
a = 1;
a = 2;
Run Code Online (Sandbox Code Playgroud)
因此,它不会给我们任何错误.
for
循环也会出现同样的行为(它们的标题中没有局部作用域),因此下面的代码非常常见:
for (var i = 0; i < n; i++) {
// ...
}
for (var i = 0; i < m; i++) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么像Douglas Crockford这样的JavaScript专家建议程序员手动将这些声明移到范围的顶部:
var i; // declare here
for (i = 0; i < n; i++) { // initialize here...
// ...
}
for (i = 0; i < m; i++) { // ... and here
// ...
}
Run Code Online (Sandbox Code Playgroud)