javascript jquery.getJSON奇怪的行为

时间:2012-05-02 17:14:17

标签: javascript jquery

我一直在尝试使用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”。 但是,如果我在调用第二行之前允许第一行完成,则会显示预期的输出。我很困惑!

3 个答案:

答案 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);
    });
}