我一直在尝试使用javascript和jQuery。我试图创建一个将json文件加载到指定div中的类,但我遇到了一个我不理解的行为:
注意:我知道这段代码不会将任何东西加载到div中,它只是我能找到的最简单的例子来显示我不理解的行为。
function test(div) {
this.div = div;
_this = this;
jQuery.getJSON('/example.json', null, function(data) {
console.log(_this.div);
});
}
当我跑
时a = new test("a");
b = new test("b");
我希望看到“ab”作为输出,但实际输出是“bb”。 但是,如果我在调用第二行之前允许第一行完成,则会显示预期的输出。我很困惑!
答案 0 :(得分:5)
您的_this
是全局变量,请在其前面添加var
。
工作示例:http://jsfiddle.net/SQRwn/
顺便说一句,如果是以下代码,你的代码会正常工作,但你在这里可能不是你要使用的代码......
function test(div) {
jQuery.getJSON('/example.json', null, function(data) {
console.log(div);
});
}
答案 1 :(得分:2)
如果在变量之前没有包含var
,它将变为全局变量:
_this = this;
shoudl be
var _this = this;
答案 2 :(得分:1)
这是因为您没有正确声明_this
变量,而且它是全局变量。将行更改为:
var _this = this;
但是,使用您的代码示例,您甚至不需要缓存this
:
function test(div) {
jQuery.getJSON('/example.json', null, function(data) {
console.log(div);
});
}