好的,这可能是一个令人尴尬的问题,因为它几乎可以肯定是“按值传递”与按引用传递的问题。我正在使用 Google Maps JavaScript API v3 并尝试填充我自己的自定义地图标记。每个标记对应于一个带有 lat、long 和关于该位置的“注释”的位置,并被编码为数组内的一个对象。但是,虽然在循环中设置标记很好,但创建一个侦听器以触发动态更新另一个 div 并带有关于位置的注释似乎不起作用:
var myList = [ { lat: ..., lon: ..., title: ..., comment: ... }, { object repeats } ];
for (var i = 0; i < myList.length; i++) {
// bunch of code setting up the marker
var myMarker = new google.maps.Marker...
google.maps.event.addListener(myMarker, 'click', function()
{
$('myDiv').empty().append(myList[i].comment);
}
现在,除了 addListener 中的匿名函数内的代码之外,一切都正常了。似乎 .comment 不是按值传递,而是按引用传递(这是有道理的),但效果是 .append() 不会附加任何内容,因为循环经过位置数组的最后一个索引并且当.append 被称为它试图清空一个空值或未定义的值。关于如何解决这个问题的任何见解?