В JavaScript мне нужно пройти цикл for
, чтобы получить значение элемента в массиве и передать его анонимной функции. Упрощенный пример этого ниже:В JavaScript, когда цикл через цикл FOR, как передать значение элемента в массиве анонимной функции?
var aFunctions = [];
var aStrings = ["a","b","c"];
for (var i = 0; i < aStrings.length - 1; i++) {
aFunctions[i] = function() { alert(aStrings[i]); };
}
aFunctions[0](); //alerts "c" instead of "a"
Я понимаю, почему это происходит - переменная i
в настоящее время установлена в 2
при выходе из цикла, а затем, когда я называю aFunctions[0]()
, функция выстреливает и оценивает aStrings[i]
а не aStrings[0]
.
Я хочу знать, как получить значение aStrings[i]
, возвращенное в моем цикле for
, а не когда оно выполнено.
Чтобы подробнее рассказать подробнее, я работаю на странице Карт Google, а маркеры хранятся на стороне сервера JavaScript и на стороне сервера БД. Я пишу массив при загрузке страницы, и после этого я хочу сгенерировать маркеры и дать им каждый пользовательский InfoWindow с текстом, установленным в строку HTML. Это специфический код я использую:
for (var i = 0; i < tGoogleMarker.length - 1; i++) {
var text = tGoogleMarker[i][4];
var marker = new google.maps.Marker({
position: new google.maps.LatLng(tGoogleMarker[i][0], tGoogleMarker[i][1]),
map: map,
flat: false,
icon: tGoogleMarker[i][2],
shadow: tGoogleMarker[i][3]
});
google.maps.event.addListener(marker, 'click', function() { ShowMarkerContentPopUp(this, text); });
}
Вместо того, чтобы получать HTML строки конкретных маркеров, я получаю текст последнего элемента в массиве используется для всех маркеров.
это 'closures' –