JavaScript中带有for的数组不会更改每个变量
嗨,我对JavaScript中带有for的数组有一些问题。我们来看看,JavaScript中带有for的数组不会更改每个变量,javascript,google-maps,geocoding,Javascript,Google Maps,Geocoding,嗨,我对JavaScript中带有for的数组有一些问题。我们来看看, var Villes = [ ['Versailles+France', 'upr2.png'], ['Paris+France', 'upr5.png'], ['Bruxelle+Belgique', 'upr4.png'], ['Manchester+Angleterre', 'upr1.png'], ['Monaco+Monaco', 'upr3.png'] ]; function initial
var Villes = [
['Versailles+France', 'upr2.png'],
['Paris+France', 'upr5.png'],
['Bruxelle+Belgique', 'upr4.png'],
['Manchester+Angleterre', 'upr1.png'],
['Monaco+Monaco', 'upr3.png']
];
function initialize() {
var mapOptions = {
zoom: 5,
center: new google.maps.LatLng(46.225453,2.219238),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
var geocoder = new google.maps.Geocoder();
for (var i = 0; i < Villes.length; i++) {
var ville = Villes[i];
geocoder.geocode( { 'address': ville[0]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var marker = new google.maps.Marker({position: results[0].geometry.location,map: map,icon: ville[1]});
alert(ville[1] + status);
} else {
alert("Geocode n'a pas fonctionner. Erreur: " + status);
}
});
}
}
var-Villes=[
[“凡尔赛+法国”,“upr2.png”],
[“巴黎+法国”,“upr5.png”],
['Bruxelle+Belgique','upr4.png'],
['Manchester+Angleterre','upr1.png'],
[“摩纳哥+摩纳哥”,“upr3.png']
];
函数初始化(){
变量映射选项={
缩放:5,
中心:新google.maps.LatLng(46.225453,2.219238),
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“地图画布”),mapOptions);
var geocoder=new google.maps.geocoder();
对于(变量i=0;i
我的地图上有我所有的标记,但图标永远不会改变,比如
ville[1]
是对upr3的静态调用。png
我不习惯JS,这是我第一次看到它。在调用geocode
的回调时,I
的值为循环结束
通常的通用解决方案是通过一个立即调用的函数表达式来保护它:
for (var i = 0; i < Villes.length; i++) {
(function(ville){
geocoder.geocode( { 'address': ville[0]}, function(results, status)
...
});
})(Villes[i]);
}
for(变量i=0;i
由于变量的作用域是声明它的函数,这使得新变量
ville
不受循环变化的影响。问题在于ville
不是数组,所以在for循环完成时,ville
只有初始数组中最后一项的值(png3)。您需要在将值设置为ville
后立即调用该函数geocode
调用是异步的,这意味着您将在所有位置循环并发送请求,然后响应将到达。此时,您已经完成了循环,并且ville
变量具有最后一位的值
在循环中的代码周围放置一个函数表达式,以便每个迭代都有自己的变量副本:
for (var i = 0; i < Villes.length; i++) {
(function(ville){
geocoder.geocode( { 'address': ville[0]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var marker = new google.maps.Marker({position: results[0].geometry.location,map: map,icon: ville[1]});
alert(ville[1] + status);
} else {
alert("Geocode n'a pas fonctionner. Erreur: " + status);
}
});
})(Villes[i]);
}
for(变量i=0;i
请在发布之前格式化您的代码。。可能重复的Thx对于您的答案来说太多了,我真的不习惯使用异步效果;-)谢谢你的回答,我真的不习惯使用异步效果;-)谢谢你的回答,我真的不习惯使用异步效果;-)