javascript – 变量覆盖到for循环中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 变量覆盖到for循环中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1458字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试使用V3为Google地图添加标记.我把我的地方变成了一个json对象(地方):
var num_places = places.length;
for(var i = 0; i < num_places; i++)
{
place_lat_lng = new google.maps.LatLng(places[i].lat, places[i].lng);
var infowindow = new google.maps.InfoWindow({
content: '<h2>' + places[i].name + '</h2><p>' + places[i].body + '</p>'
});
var marker = new google.maps.Marker({
position: place_lat_lng,
map: mymap,
title: places[i].name,
zIndex: i
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(mymap, marker);
});
}
代码插入标记,但当我点击其中任何一个时,infoWindow显示(并将地图移动)始终显示在列表中的最后一个标记处.
我尝试使用数组来为infoWindow:
var infoWindow = new Array();
for(var i = 0; i < num_places; i++)
{
[...]
var infowindow[i] = new google.maps.InfoWindow({
content: '<h2>' + places[i].name + '</h2><p>' + places[i].body + '</p>'
});
[...]
google.maps.event.addListener(marker, 'click', function() {
infowindow[i].open(mymap, marker);
});
}
但是没有改变.
我错在哪里?
解决方法:
在JavaScript中,只有函数创建一个新的范围/闭包.因此,您只有一个infowindow变量,它被捕获到内部函数中,但最终将指向最后一个窗口.使用自调用函数来设置一个新的closuse:
for (var i = 0; ...) {
(function() {
var infowindow = ...;
})();
}
请注意,仍然不会单独捕获i的值.目前您似乎不需要它,但如果您这样做,请将其传递给函数以在函数内创建它的本地版本:
(function(i) { // this is the new local i with the value passed in from the outside
// ...accessible here
})(i); // this is the outer i
内容总结
以上是互联网集市为您收集整理的javascript – 变量覆盖到for循环中全部内容,希望文章能够帮你解决javascript – 变量覆盖到for循环中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。