javascript:创建全局变量的局部作用域在设置它之前取消定义它
我不理解这种行为:javascript:创建全局变量的局部作用域在设置它之前取消定义它,javascript,scope,closures,local,undefined,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未定义1:错误 a未定义2:真 如
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未定义1:错误
a未定义2:真 如果最后一行(var a;)被注释掉,则返回该行:
a未定义1:错误
a未定义2:错误 我总是期望后者的输出。我不知道什么
非常感谢 将
var a
放入一个函数中会创建一个不同的a
变量,该变量的作用域为该函数
因为您没有给它赋值,所以它是未定义的
当您注释掉它时,您正在测试值为1的外部a
变量被提升。无论您在函数中的何处使用
var foo
,该函数的foo
仍然适用于整个函数。使用var
在函数中声明变量会在整个函数上创建具有作用域的局部副本(新变量)-在声明之前是否使用它并不重要
不要在没有var
的情况下声明变量
如果要访问golobal变量,并且您有同名的局部变量,可以使用
window.foo
aha访问全局foo
变量!提升是一个神奇的词。从另一个堆栈溢出中找到此。谢谢