每次運行此循環時,marker數組中的每個標記都會將其圖標從let icon = iconLoader.getIcon(data[index][5]);
的結果中覆蓋。 讓每個標記具有最後加載的圖標,而不是在for循環的每次傳遞期間加載圖標。來自內部的值,用於循環覆蓋循環外的數據
我認爲將圖標傳遞給閉包基本上會通過值傳遞它,防止它被覆蓋在閉包範圍之外,但這似乎不適用於我。我錯過了什麼?
var markers = []
for (var index in data) {
let icon = iconLoader.getIcon(data[index][5]);
var createMarker = (function (i) {
return function() {
var marker = new L.marker([data[index][2], data[index][3]])
.setIcon(i)
markers.push(marker);
}
})(icon);
createMarker();
}
var iconLoader = (function() {
var icon = L.icon({
// options
});
return {
getIcon: function (iconName) {
// do stuff to get icon
return icon;
}
};
}());
對象和數組除非你創建一個副本 – mhodges
你也永遠不會調用由您IIFE..at返回的功能至少不總是按引用傳遞無論如何,你提供的代碼。 – mhodges
你可以發佈'setIcon'函數的內容嗎?最好是標記類的結構呢? – mhodges