javascript window.onload范围

teg*_*ggy 2 javascript scope

有人可以解释为什么警报返回"未定义"而不是"你好"?

window.onload = function() {  
    var a = 'hello';  
    alert(window.a);  
}
Run Code Online (Sandbox Code Playgroud)

小智 6

变量'a'不是您上下文中窗口的一部分.

a的作用域是您分配给onload的匿名函数.

如果你愿意,你可以添加一个窗口成员:

window.onload = function() {  
    window.a = 'hello';  
    alert(window.a);  
}
Run Code Online (Sandbox Code Playgroud)

但我建议不要这样做.


art*_*ung 5

"命名变量是用var语句定义的.当在函数内部使用时,var定义带有函数范围的变量." - (来源)

要在全局访问,特别是要成为对象a的成员window,请以这种方式更改代码:

var a; // defined in the global scope
window.onload = function() {  
    a = 'hello'; // initialized
    alert(window.a);  
}
Run Code Online (Sandbox Code Playgroud)

或者以这种方式:

var b = 'world'; //defined and initialized in the global scope
window.onload = function() {  
    alert(window.b);  
}
Run Code Online (Sandbox Code Playgroud)