有人能告诉我我的代码有什么问题,特别是"全屏事件"部分.谢谢!
JSLint说"在循环中声明的引用外部范围变量的函数可能会导致混淆语义."
function initialize() {
var mapProp = {
center: new google.maps.LatLng(45.502808, -73.571486),
};
var map = [];
map[0] = new google.maps.Map(document.getElementById("map1"), mapProp);
map[1] = new google.maps.Map(document.getElementById("map2"), mapProp);
map[2] = new google.maps.Map(document.getElementById("map3"), mapProp);
new google.maps.Marker({
position: new google.maps.LatLng(45.502808, -73.571486),
map: map[0], title: 'Sunnyvale '
});
new google.maps.Marker({
position: new google.maps.LatLng(45.502808, -73.571486),
map: map[1], title: 'Sunnyvale '
});
new google.maps.Marker({
position: new google.maps.LatLng(45.502808, -73.571486),
map: map[2], title: 'Sunnyvale '
});
google.maps.event.addDomListener(window, "resize", function () {
for (i = 0; i < 3; i++) {
var center = map[i].getCenter();
/*var bounds = map[i].getBounds();*/
var zoom = map[i].getZoom();
google.maps.event.trigger(map[i], "resize");
/*map[i].fitBounds(bounds);*/
map[i].setCenter(center);
google.maps.event.addListenerOnce(map[i], 'bounds_changed', function(event) {
this.setZoom(zoom);
});
}
});
/** Full Screen event */
for (i = 0; i < 3; i++) {
var centerChanged = [];
var zoomChanged = [];
google.maps.event.addListener(map[i], 'center_changed', function() {
var centerChanged[i] = map[i].getCenter();
var zoomChanged[i] = map[i].getZoom();
});
$(document).on('webkitfullscreenchange mozfullscreenchange fullscreenchange', function() {
map[i].setCenter(centerChanged[i]);
google.maps.event.addListenerOnce(map[i], 'bounds_changed', function (event) {
this.setZoom(zoomChanged[i]);
});
});
}
}
google.maps.event.addDomListener(window, 'load', initialize);
Run Code Online (Sandbox Code Playgroud)
JSLint说"在循环中声明的引用外部范围变量的函数可能会导致混淆语义."
EKW*_*EKW 14
在你的循环中,我从0开始并迭代直到它等于3.这意味着无论何时在循环完成运行后访问i(例如,在侦听器函数中)它将等于3.你可以在以下代码:
for(var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}Run Code Online (Sandbox Code Playgroud)
这将打印所有5,因为在循环完成迭代后调用该函数.
编辑:要解决此问题,您可以使用javascript的hip新声明语句:let和const.它们仅存在于声明它们的范围内,因此它们的值不会被覆盖.
for(var i = 0; i < 5; i++) {
const j = i;
setTimeout(function() {
console.log(j);
}, 1000);
}Run Code Online (Sandbox Code Playgroud)
编辑2:更换var i同let i似乎工作,以及:
for(let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}Run Code Online (Sandbox Code Playgroud)
编辑3:如果es6不是一个选项,你可以将i的值绑定到函数:
for(var i = 0; i < 5; i++) {
setTimeout((function(j) {
console.log(j);
}).bind(null, i), 1000);
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13065 次 |
| 最近记录: |