매개 변수를 콜백 함수로 전달하십시오
-
12-09-2019 - |
문제
내 코드
// ajax 요청을하고 JSON 응답을받습니다
for (var i = 0; i < data.results.length; i++) {
result = data.results[i];
// do stuff and create google maps marker
marker = new google.maps.Marker({
position: new google.maps.LatLng(result.lat, result.lng),
map: map,
id: result.id
});
google.maps.event.addListener(marker, 'click', function() {
createWindow(marker.id); //<==== this doesn't work because marker always points to the last results when this function is called
});
}
이것을 해결하는 방법?
해결책
이 시도:
with ({ mark: marker }) {
google.maps.event.addListener(mark, 'click', function() {
createWindow(mark.id);
});
}
사용을 보여주는 예 with
:
for (var i = 0; i < 10; i++) {
setTimeout(function() { console.log(i); }, 1000);
}
위의 내용이 기록됩니다 10
열 번.
for (var i = 0; i < 10; i++) {
with ({ foo: i }) {
setTimeout(function() { console.log(foo); }, 1000);
}
}
이것은 로그입니다 0
에게 9
, 원하는대로 감사합니다 with
새로운 범위를 소개합니다.
JavaScript 1.7은 a let
더 좋은 진술이지만 널리 지원 될 때까지 사용할 수 있습니다. with
.
그리고 사용 var
변수의 경우.
다른 팁
그만큼 고전적인 폐쇄 문제 다시 파업!
google.maps.event.addListener(marker, 'click', function(id) {
return function(){
createWindow(id); //<==== this doesn't work because marker always points to the last results when this function is called
}
}(marker.id));
폐쇄 문제가있는 것 같습니다. 이 질문보기 :
이거 한번 해봐
var marker = new Array();
for (var i = 0; i < data.results.length; i++) {
result = data.results[i];
// do stuff and create google maps marker
marker[i] = new google.maps.Marker({
position: new google.maps.LatLng(result.lat, result.lng),
map: map,
id: result.id
});
google.maps.event.addListener(marker[i], 'click', example(marker[i].id));
}
새 기능을 만듭니다
function example(my_window){
return function(){
createWindow(my_window);
}
}
제휴하지 않습니다 StackOverflow