在for循环中关闭

时间:2014-03-23 14:43:00

标签: javascript

我正在尝试在for循环中创建一个闭包函数,如下所示:

for (var j = 0; j < end.length; j++) {
    directionsService[iReq] = new google.maps.DirectionsService();
    directionsService[iReq].route(request[iReq], (function(){
        return function (response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                legs = response.routes[0].legs;
                for (var iLeg = 0; iLeg < legs.length; iLeg++) {
                    totalDistance += legs[iLeg].distance.value; //Math.floor((legs[iLeg].distance.value)/1000)*100;
                }
            }
            alert("1"); //1
        }
    })());
    alert("2"); //2
}

它应分别警告“1”和“2”,但是,我总是在“1”之前得到警告“2”。我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

你的函数是一个回调,在alert('2')之后将alert('1')放在你的函数中,因为回调函数可以异步执行

答案 1 :(得分:0)

directionsService[iReq].route似乎是一个异步函数 - 它允许其他代码先运行,然后只有在它准备就绪时才会运行,然后在其他代码运行后调用给出的回调函数。 / p>

将代码放在IIFE(立即调用的函数表达式)中不会阻止alert(2);alert(1);之前运行。