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

slh*_*hck 3 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
Run Code Online (Sandbox Code Playgroud)

在这里,我期望features不断成长.但是,在最后一行,features再次是空的.

这是为什么,以及如何将我推正确价值观features的内$.each(或者更确切地说,匿名函数内)?

Ale*_*lex 5

$.getJSON调用是异步的,所以annotationLayer.addFeatures在JSON请求已完成之前可能被执行.调用addFeatures方法内部$.getJSON调用,后.each循环.

如果你需要执行更多的东西features,可以考虑创建一个新函数(包括addFeatures你需要调用的方法),然后在调用中的.each循环之后调用这个新函数$.getJSON.