gpt4 book ai didi

javascript - 在 JavaScript 中带有 for 的数组不会更改每个 var

转载 作者:行者123 更新时间:2023-11-29 15:43:22 25 4
gpt4 key购买 nike

您好,我在使用 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 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);
}
});
}
}

我的 map 带有我所有的标记,但图标永远不会改变,就像 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]);
}

由于变量的范围是声明它的函数,这使得新变量 ville 不受循环变化的影响。

关于javascript - 在 JavaScript 中带有 for 的数组不会更改每个 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15615640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com