我正在尝试在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”。我的代码出了什么问题?
答案 0 :(得分:0)
你的函数是一个回调,在alert('2')
之后将alert('1')
放在你的函数中,因为回调函数可以异步执行
答案 1 :(得分:0)
将代码放在IIFE(立即调用的函数表达式)中不会阻止directionsService[iReq].route
似乎是一个异步函数 - 它允许其他代码先运行,然后只有在它准备就绪时才会运行,然后在其他代码运行后调用给出的回调函数。 / p>
alert(2);
在alert(1);
之前运行。