回调中的javascript变量范围

时间:2013-02-28 07:36:09

标签: javascript jquery

我很好奇如何更好地写出来:

function Klass(variable) {
    this.variable = variable;

    this.callAjax = function() {
        $.get('/url', { }, function(json) {
            console.log(variable); //! <-- shows undefined
        }, "json");
    }
}

所以我创建了一个局部变量:_variable

function Klass(variable) {
    this.variable = variable;

    this.callAjax = function() {
        var _variable = this.variable;
        $.get('/url', { }, function(json) {
            console.log(_variable); //! <-- its ok
        }, "json");
    }
}

它很好,但我真的没有这个解决方案,

你们中有人有更好的代码吗?

1 个答案:

答案 0 :(得分:4)

那就是这样。

function(json){console.log(_variable);} 

形成一个带有“_variable”的闭包。 “_variable”永远保留原始值。

如果您的“变量”应稍后更新,并且您想要更新的“变量” 你定义

var self = this; 

并调用self.variable来获取它。

这样,每次执行回调时,您都会获得更新的“变量”。

完整的代码:

function Klass(variable) {
    var self = this;
    this.variable = variable;
    this.callAjax = function() {
        $.get('/url', { }, function(json) {
            console.log(self.variable);
        }, "json");
    }
}