Javascript 设置超时/循环。。。仍然困惑

Javascript 设置超时/循环。。。仍然困惑,javascript,for-loop,settimeout,Javascript,For Loop,Settimeout,所以我从昨天下午就开始做这件事了。我已经对基本代码进行了多次迭代,试图得到我想要的结果(我希望每xx毫秒按顺序删除标记),但没有任何效果。我得到的结果是他们要么一下子就走,要么根本不走。我相当肯定“一点也不”的问题是由于语法错误造成的,我纠正了错误,得到了“一次全部”的答案 这是函数 function marker(location) { geocoder = new google.maps.Geocoder(); var latlng = n

所以我从昨天下午就开始做这件事了。我已经对基本代码进行了多次迭代,试图得到我想要的结果(我希望每xx毫秒按顺序删除标记),但没有任何效果。我得到的结果是他们要么一下子就走,要么根本不走。我相当肯定“一点也不”的问题是由于语法错误造成的,我纠正了错误,得到了“一次全部”的答案

这是函数

    function marker(location) 
    {

        geocoder = new google.maps.Geocoder();
        var latlng = new google.maps.LatLng(37.5, -98.35);
        var mapOptions = 
        {
            zoom: 5,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }

        map = new google.maps.Map(document.getElementById('googleMap'), mapOptions);

        var infowindow = new google.maps.InfoWindow(), marker, i;

        for (i = 0; i < location.length; i++) 

        {


            marker = new google.maps.Marker(
            {
                position: new google.maps.LatLng(location[i][1], location[i][2]),
                animation: google.maps.Animation.DROP,
                map: map
            }
            );


            google.maps.event.addListener(marker, 'click', (function (marker, i) 
            {

                return function () 
                {
                    infowindow.setContent(location[i][0]);
                    infowindow.open(map, marker);
                }

            }
            )(marker, i));


        }

    }
功能标记(位置)
{
geocoder=新的google.maps.geocoder();
var-latlng=新的google.maps.latlng(37.5,-98.35);
变量映射选项=
{
缩放:5,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById('googleMap')、mapOptions);
var infowindow=new google.maps.infowindow(),marker,i;
对于(i=0;i
我想我应该做的是在合理的范围内,就像这样

        for (i = 0; i < location.length; i++) 

        {
           setTimeout(function() { 

            marker = new google.maps.Marker(
            {
                position: new google.maps.LatLng(location[i][1], location[i][2]),
                animation: google.maps.Animation.DROP,
                map: map
            }
            );


            google.maps.event.addListener(marker, 'click', (function (marker, i) 
            {

                return function () 
                {
                    infowindow.setContent(location[i][0]);
                    infowindow.open(map, marker);
                }

            }
            )(marker, i));
            }, 1000)
        }
for(i=0;i
但这不起作用,我尝试过的其他事情也不起作用。我已经看了很多解释,其中大部分似乎是有道理的,但我无法理解这一点,我认为更多的是关于for循环,而不是其他任何东西

例如,我还尝试在setTimeout中封装addlistener,认为如果我运行addlistener代码并等待,它就会工作。我想我现在的处境是,我需要想出一种方法来打破循环,等待被调用的函数返回一些东西,但我不确定如何做到这一点


如果有人能告诉我我是否在正确的轨道上,我将不胜感激。

如果您不想同时获得所有结果,您需要给出不同的时间,因为循环会立即执行,所有超时都是从执行时开始计算的:

setTimeout(function() { 

}, 1000*i);
为了避免所有迭代都使用相同的
i
值的问题,请使用

for (i = 0; i < location.length; i++) {
   (function(i){
       setTimeout(function() { 

       }, 1000*i);
   })(i);
}
for(i=0;i
如果不希望一次获得所有结果,则需要给出不同的时间,因为循环会立即执行,所有超时都是从执行时开始计算的:

setTimeout(function() { 

}, 1000*i);
为了避免所有迭代都使用相同的
i
值的问题,请使用

for (i = 0; i < location.length; i++) {
   (function(i){
       setTimeout(function() { 

       }, 1000*i);
   })(i);
}
for(i=0;i
也许您应该将
var
添加到
marker
也许您应该将
var
添加到
marker
确定。成功了,谢谢!我现在只需要理解它,我真的还不明白。过一会儿我会回来看看你的答案,这样我就能理解了。让它发挥作用固然重要,但理解对我来说更重要。谢谢again@jsteffler好啊成功了,谢谢!我现在只需要理解它,我真的还不明白。过一会儿我会回来看看你的答案,这样我就能理解了。让它发挥作用固然重要,但理解对我来说更重要。谢谢again@jsteffler .