javascript闭包不起作用?

javascript闭包不起作用?,javascript,closures,Javascript,Closures,我有以下代码: for (var i in listings){ var listing = listings[i]; map.addMarker({ lat: listing.GeographicLocation.Latitude, lng: listing.GeographicLocation.Longitude, title: listing.Title, click: function(e){ (function(listing){

我有以下代码:

for (var i in listings){
  var listing = listings[i];
  map.addMarker({
    lat: listing.GeographicLocation.Latitude,
    lng: listing.GeographicLocation.Longitude,
    title: listing.Title,
    click: function(e){
      (function(listing){
         console.log(listing.Title);
      })(listing);
    },  
  });
}
当我点击标记时,我总是得到最后一个列表的标题

for (var i in listings) {
  var listing = listings[i];
  map.addMarker({
    lat: listing.GeographicLocation.Latitude,
    lng: listing.GeographicLocation.Longitude,
    title: listing.Title,
    click: (function (listing) {
      return function(e) {
        console.log(listing.Title);
      };
    })(listing)
  });
}
您将闭包放错了位置-它需要立即执行,而不是在调用click事件时执行

您将闭包放错了方向-需要立即执行闭包,而不是在调用click事件时执行闭包。

确定解决方法:

for (var i in listings){
  var listing = listings[i];
  map.addMarker({
    lat: listing.GeographicLocation.Latitude,
    lng: listing.GeographicLocation.Longitude,
    title: listing.Title,
    click: (function(listing){
      return function(e){
         console.log(listing.Title);
      })(listing),
  });
}
好吧,我想起来了:

for (var i in listings){
  var listing = listings[i];
  map.addMarker({
    lat: listing.GeographicLocation.Latitude,
    lng: listing.GeographicLocation.Longitude,
    title: listing.Title,
    click: (function(listing){
      return function(e){
         console.log(listing.Title);
      })(listing),
  });
}

对我来说清楚-提问者通过“i”询问日志消息集未反映循环设定的值。对我来说清楚-提问者通过“i”询问日志消息集未反映循环设定的值。