为什么在JSON数据上使用$ .each后我的闭包变量被清除了?

时间:2011-09-19 10:35:32

标签: javascript jquery json closures

考虑以下示例:

var features = [];

$.getJSON(annotations_url, function(data) { 
  $.each(data, function(key, val) {
    features.push(wkt_parser.read(val.annotation.wkt_data));
    // at this point, "features" contains objects
  });
});

annotationLayer.addFeatures(features);
// here, it is empty again

在这里,我希望features能够持续增长。但是,在最后一行中,features再次为空。

为什么会这样,我如何从features(或者更确切地说是内部的匿名函数)中正确地将值推送到$.each

2 个答案:

答案 0 :(得分:5)

$.getJSON调用是异步的,因此在JSON请求完成之前可能正在执行annotationLayer.addFeatures。在addFeatures循环之后,在$.getJSON调用内调用<{1}}方法

如果您需要使用.each执行更多内容,请考虑创建一个新函数(包括您需要调用的features方法),然后在{{1}之后调用此新函数在addFeatures调用中循环。

答案 1 :(得分:1)

这与$.getJSON函数的异步行为有关。在annotationLayer.addFeatures(features);功能中移动$.getJSON

features变量未被“清除”;相反,当annotationLayer.addFeatures(features);被执行时,它没有被填充。