我有一個對象Map3
,處理顯示我的數據集在谷歌地圖上的標記。它是一個通用對象,我想在很多不同的應用程序中使用它,所以我定義了一個名爲markerInstall
的回調函數,它將自定義事件處理函數安裝到我的標記中。實施例使用(簡化):如何避免關閉,當您需要提供回調來安裝事件處理程序
var map = new Map3({
markerInstall: function (marker) {
google.maps.event.addListener(marker, 'click', function(e) {
window.open('detail.php?id=' + this.my.id);
}
google.maps.event.addListener(marker, 'mouseover', function(e) {
// do something else
}
}
});
的MAP3對象包含循環是這樣的:
for (i = 0; i < data.length; i++) {
...
var m = new google.maps.Marker(opts);
this.markerInstall(m);
...
}
現在,由於markerInstall
被稱爲用於分開每個標記(I上百個的實例),這會創建一個每個標記的閉包,閉包在應用程序結束之前不會被釋放(因爲它是由事件處理程序引用的)。我認爲這是一個問題,因爲它會消耗一些內存。 如何避免關閉並保持對象的通用性?或者我不應該打擾太多,因爲它不會消耗太多的內存?
要downvoter - 請添加評論我的問題不清楚或沒有用處。 – TMS
我不認爲你有什麼擔心。關閉中唯一的東西是「標記」參數。 – Pointy