javascript window.onload范围

时间:2010-05-04 01:02:29

标签: javascript scope

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

window.onload = function() {  
    var a = 'hello';  
    alert(window.a);  
}

2 个答案:

答案 0 :(得分:6)

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

a范围限定为您指定为onload的匿名函数。

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

window.onload = function() {  
    window.a = 'hello';  
    alert(window.a);  
}

但我建议不要这样做。

答案 1 :(得分:5)

“命名变量是用var语句定义的。当在函数内部使用时,var定义带有函数范围的变量。” - (source

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

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

或者以这种方式:

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