在函数javascript中调用函数

Zah*_*aka 1 javascript

我在jQuery ajax调用的成功函数中有这个代码 success: function(d)

for (var n in d.items)
{        
    google.maps.event.addListener(markers[d.items[n].id], 'mouseover', function() {
        focusMarker(d.items[n].id);
    });
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,该函数始终被评估d.items[n].idd.items集合中的最后一项.

我尝试过这个修改:

for (var n in d.items)
{        
    var id = d.items[n].id;        
    google.maps.event.addListener(markers[d.items[n].id], 'mouseover', function() {
        focusMarker(id);
    });
}
Run Code Online (Sandbox Code Playgroud)

但我的功能总是返回相同的东西.

这是范围问题,还是我的功能定义有问题?

CMS*_*CMS 6

有几种方法可以解决这个问题,最常见的是使用一个函数来保存循环值:

for (var n in d.items) {
  (function(id) {
    google.maps.event.addListener(markers[id], 'mouseover', function() {
        focusMarker(id);
    });
  })(d.items[n].id);
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果d.items是一个数组,我建议你使用顺序循环,例如:

for (var n = 0; n < d.items.length; n++) {
  //..
}
Run Code Online (Sandbox Code Playgroud)

for-in语句用于枚举对象属性.

如果您在数组或类似对象的数组上使用它,它可能会给您带来一些问题,首先,还会枚举继承的属性,这意味着如果有人扩充了Array.prototype对象,那么这些属性也会在循环中枚举.

此外,规范不保证迭代的顺序,也不能以数字顺序访问属性.