Javascript中的内联函数和全局变量问题
我这里有一些代码: 我用来画一些关于卡车方向的信息 问题来自于在for循环中定义的函数,如下所示: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(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