Javascript中的内联函数和全局变量问题

Javascript中的内联函数和全局变量问题,javascript,global-variables,Javascript,Global Variables,我这里有一些代码: 我用来画一些关于卡车方向的信息 问题来自于在for循环中定义的函数,如下所示: ... for(i = 0; i < nb_trucks; i++) { ... contentString = '<div id="content">'+ trucks[i]['name'] + '</div>'; current_window = new google.maps.InfoWindow({ content

我这里有一些代码:

我用来画一些关于卡车方向的信息

问题来自于在for循环中定义的函数,如下所示:

...

for(i = 0; i < nb_trucks; i++)
{
    ...

    contentString = '<div id="content">'+ trucks[i]['name'] + '</div>';

    current_window = new google.maps.InfoWindow({
        content: contentString
    });            

    infosWindow.push(current_window);

    current_marker = new google.maps.Marker({
        map: map,
        position: new google.maps.LatLng(trucks[i]['end']['lat'], trucks[i]['end']['lon']),
        draggable: false,
        title: trucks[i]['name']
    });
    markers.push(current_marker);

    google.maps.event.addListener(current_marker, 'click', function() {
        current_window.open(map, current_marker);
    });
}
我的问题是addListener参数中的当前_标记与函数中的不同

函数内的当前_窗口和当前_标记在每个循环圈的上方

我怎样才能把它做好

谢谢

将其包装成一个(仅此一小部分,没有其他更改),这样您就可以得到所需的变量,如下所示:

(function(marker) { //a copy is passed, accessible as marker inside this function
  google.maps.event.addListener(marker, 'click', function() {
    current_window.open(map, marker);
  });
})(current_marker); //pass in the current value

这并不是引用改变每个循环的同一个变量,它的一个副本被传递到闭包中,所以每次运行它时,它都会得到一个当前标记的副本。如果您对此更感兴趣,。

非常感谢,这正是我想要的!也许使用Prototype的.bind()方法也能起作用。@Dormilich:这也只是一个闭包,虽然用了其他代码包装……但在这种情况下,core javascript很容易做到这一点,没有理由包含这样的库。我知道,我怀疑在没有闭包(或者更确切地说是“防止”的闭包)的情况下它会起作用你真的应该养成用
var
声明变量的习惯,哪一个不是?我在完整文件中的for循环之外完成了它。
(function(marker) { //a copy is passed, accessible as marker inside this function
  google.maps.event.addListener(marker, 'click', function() {
    current_window.open(map, marker);
  });
})(current_marker); //pass in the current value