将参数传递给回调函数

Der*_*erk 10 javascript google-maps dom-events

我的代码

//执行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
    });  

}
Run Code Online (Sandbox Code Playgroud)

怎么解决这个?

nlo*_*gax 24

试试这个:

with ({ mark: marker }) {
    google.maps.event.addListener(mark, 'click', function() {  
        createWindow(mark.id);
    });
}
Run Code Online (Sandbox Code Playgroud)

一个演示如下使用的示例with:

for (var i = 0; i < 10; i++) {
    setTimeout(function() { console.log(i); }, 1000);
}
Run Code Online (Sandbox Code Playgroud)

以上将记录10十次.

for (var i = 0; i < 10; i++) {
    with ({ foo: i }) {
        setTimeout(function() { console.log(foo); }, 1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将记录09,根据需要,由于with引入一个新的范围.

JavaScript 1.7有一个let更好的语句,但在广泛支持之前,您可以使用with.

var用于您的变量.