jQuery变量范围/调用序列

时间:2011-08-05 00:50:53

标签: javascript jquery scope

我无法理解jQuery变量范围。

var myVar;

function getMyVar() {
    myVar = 'test';
}

$(window).load(function() {
    getMyVar();
});

alert(myVar);   

此代码会提醒'undefined',我需要它来显示'test',我想在这里了解我的范围问题。

4 个答案:

答案 0 :(得分:3)

这不是范围问题。

alert即使在触发window.load事件之前也会被执行,这是变量myVar被赋值为'test'的地方。

根据MDN文件:

  

加载事件在文档加载过程结束时触发。在   至此,文档中的所有对象都在DOM中,而且都是   图像和子帧已完成加载。

答案 1 :(得分:2)

问题是在加载窗口之前不会调用getMyVar,而是立即执行警报。因此,警报在定义变量之前发生。它不是关于范围,而是关于窗口加载函数的异步执行。

答案 2 :(得分:1)

范围界定不仅限于jQuery。它的javascript如何定义范围是这里的规则。 jQuery是一个建立在javascript之上的库。

话虽如此,你宣布一个人人都可以访问的全局变量。但是,分配在DOM完成加载后发生。警报语句立即运行。

如果您在调用.load后在getMyVar()内移动提醒,则会看到输出正确的值。

答案 3 :(得分:0)

这不是范围问题。

alert(myVar);getMyVar();

之前运行