我一直在搜索SE 2小时,现在试图解决我失去'locations'变量值的原因。利用闭包看起来是最好的解决方案,但在下面的回调函数的上下文中,我无法弄清楚如何正确实现它。
有人能否就这一现象提供一些见解,如何解决这个问题?如果有任何关键术语,请指出它们,以便我可以相应地研究它们。
感谢您的时间。
有问题的代码:
for (var i = 0; i < locations.length; i++) {
geocoder.geocode({
'address': locations[i] // Returns location as expected
}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
alert(locations[i]); // returns undefined
}
})
}
为了澄清,我已经看到了与此类似的最接近的帖子:When using callbacks inside a loop in javascript, is there any way to save a variable that's updated in the loop for use in the callback?但我无法在这种情况范围内使其发挥作用。
再次感谢。
答案 0 :(得分:0)
for (var i = 0; i < locations.length; i++) {
geocoder.geocode({
'address': locations[i] // Returns location as expected
}, (function (i) {
var location = locations[i];
function getLoc()
{
return location;
}
return function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
console.log(getLoc());
}
}(i))
})
}
试试这个