JavaScript的回调范围问题

时间:2016-08-07 12:10:56

标签: javascript scope closures settimeout

我在javascript中有一个生产者 - 消费者设计,生产者通过ajax提取一些JSON数据。消费者每个都使用自定义回调函数注册对数据的兴趣,然后在数据可用时(或者如果加载失败)稍微延迟后,每个消息都会得到一个回调。

我实际触发回调的当前功能如下所示:

// Function to iterate through all registered callbacks
this._processCallbacks = function() {
    var self = this;
    for (var callback of this.callbacks) {
        setTimeout(function(){ callback(self.data != null) }, 2000);
    }
}

...但是有了这个,列表中的最后一个回调被称为N次,而不是每次回调一次。

如果我删除了setTimeout并且只是同步调用它就可以了......

// Function to iterate through all registered callbacks
this._processCallbacks = function() {
    var self = this;
    for (var callback of this.callbacks) {
        callback(self.data != null);
    }
}

...所以我假设我错过了关闭范围和超时的一些微妙之处。任何帮助表示赞赏 - 我不确定我错过了什么(我唯一知道的范围问题是this被修改的问题)。

0 个答案:

没有答案