【发布时间】:2014-09-01 19:19:19
【问题描述】:
在这种情况下解决 JSHint 错误的正确方法是什么?删除function(i) 会解决它吗?这样做会影响性能吗?
for (var i = 0; i + 1 <= pinlatlong.length; i++) {
(function(i) {
setTimeout(function() {
var latlong_array = pinlatlong[i].lat_long.split(','),
marker = new google.maps.Marker({
position: new google.maps.LatLng(latlong_array[0],latlong_array[1]),
map: map,
animation: google.maps.Animation.DROP,
icon: pinimage,
optimized: false
});
// info windows
var infowindow = new google.maps.InfoWindow({
content: pinlatlong[i].title,
maxWidth: 300
});
infoWindows.push(infowindow);
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infoWindows[i].open(map, this);
};
})(marker, i));
}, i * 250); // end setTimeout
}(i)); // end auto function
} // end for
【问题讨论】:
-
我会使用
pinlatlong.forEach;如有必要,使用 polyfill。 -
Search for messages之前询问。
-
我个人认为“提示”通常最好忽略,但是有很多重复解释原因和一些解决方案。如果删除了外部 (
function (i)) 函数,那么所有 setTimeouts 将使用相同的i,因为将不引入新的i。在这种情况下,使用 setInterval 然后在内部推进i/the-point ,完成后调用 clearInterval 也可能是谨慎的。 -
@user2864740 提示是因为“外部函数”,即匿名闭包,会在每次循环迭代时重新评估和重新创建。建议不是完全删除该功能。是在循环外定义,所以只创建一次,循环调用就行了。
标签: javascript jslint jshint