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

Pet*_*ich 0 javascript closures scope 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;
Run Code Online (Sandbox Code Playgroud)

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

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

我希望总是后者输出.我不知道什么?

非常感谢!

Que*_*tin 6

var a一个函数内部创建一个不同的a范围限定于该功能的变量.

由于您没有为其赋值,因此未定义.

当你注释掉它时,你正在测试a值为1 的outer .

变量被悬挂.在您使用的函数中var foo,无论何处,该foo函数仍然适用于整个函数.