每次运行此循环时,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