javascript:创建全局变量的局部范围在设置之前未定义它

时间:2011-04-09 06:18:17

标签: javascript scope closures local undefined

我不明白这种行为:

var a = 1;
console.log('a is undefined1:', a == undefined);
var a;

//iterate selected jQuery elements:
jQuery.each(this, function(index, htmlElement) {
    console.log('a is undefined2:', a == undefined);
    var a;

返回
a是undefined1:false
a是undefined2:true

如果最后一行(var a;)已注释掉,则返回
a是undefined1:false
a是undefined2:false

我希望始终是后者的输出。什么我不知道?

非常感谢!

2 个答案:

答案 0 :(得分:6)

var a置于函数内会创建一个不同的a变量,该变量的作用域是该函数。

由于您没有为其指定值,因此未定义。

当您对其进行评论时,您正在测试值为1的外部a

悬挂变量。在使用var foo函数的位置无关紧要,该函数的foo仍然适用于整个函数。

答案 1 :(得分:1)

使用var在函数内声明变量会使整个函数的范围内的本地副本(新变量) - 在声明它之前是否使用它无关紧要。

永远不要在没有var的情况下声明变量。

如果您想访问golobal变量并且您拥有相同名称的本地变量,则可以使用foo

访问全局window.foo变量