我正试图在嵌套回调中访问lopp索引。 这是代码:
gatherAddresses: function(){
var divs = $('#searchResults .address');
var addrs = [];
for (var i = 0; i < divs.length; i++) {
if (divs[i].className == 'address') {
var address = $.trim($(divs[i]).html());
var rel = divs[i].getAttribute('rel');
results.addresses.push({
address: address,
rel: rel
});
results.geocoder.getLatLng(address, function(point){
if (!point) {
alert(address + ' not found');
}
else {
var marker = new GMarker(point);
//chmurka :)
GEvent.addListener(marker, "click", function(){
/////////////here I want the loop index
marker.openInfoWindowHtml("<b>""</b><br/>");
});
results.map.addOverlay(marker);
addrs.push({
rel: results.findRel(address),
point: point
});
results.findCenter(addrs, results.map);
}
});
}
}
},
我知道这一切都是为了理解回调和变量范围,但我请求你的帮助,因为这是我的第一个回调问题:)
答案 0 :(得分:3)
由于闭包,你的回调已经可以访问i
了,但它有一个变量的“引用”,因此值可能不是你想要的值,因为它总是最新的,最好的,如果您希望回调在调用i
时results.geocoder.getLatLng
使用值,则需要通过另一个匿名函数创建i
的副本:
(function(e) { // get a copy of the value that WON'T change
GEvent.addListener(marker, "click", function(){
// use e here as the index
});
})(i); // pass the value of i in
答案 1 :(得分:1)
GEvent.addListener(marker, "click", function (loopIndex) {
return function () {
// the variable "loopIndex" will have the value of i
marker.openInfoWindowHtml("<b>""</b><br/>");
}
}(i));