Javascript-如何在带有回调的for循环中使用迭代器
Javascript - how to work with the iterator in a for loop with callbacks
我正在for循环中尝试访问回调函数使用的I的值。
我该怎么做?
for (var i = 0; i < a.length; i++)
{
calcRoute(fixedLocation, my_cities[i].address, function(response) {
// i want here to have the current "i" here
});
}
它调用。。。
function calcRoute(x, y, callback) {
var start = x;
var end = y;
var request = {
origin:start,
destination:end,
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
optimizeWaypoints: true
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
callback(response);
} else {
alert("City unknown.")
}
});
}
这是因为闭包捕获变量i
本身,而不是当前值。尝试:
for (var i = 0; i < a.length; i++) (function(i)
{
calcRoute(fixedLocation, my_cities[i].address, function(response) {
// i want here to have the current "i" here
});
}) (i);
这将为每个循环迭代创建新的CCD_ 2变量。
可能最优雅的方法就是使用Array.forEach
:
a.forEach(function(someA, i) {
calcRoute(fixedLocation, my_cities[i].address, function(response) {
// i want here to have the current "i" here
});
});
回调函数被传递:
- 当前元素
- 当前索引
- 它被调用的数组
省略参数只意味着您不能在回调中访问它们。(通常您会省略索引,只使用当前元素)。
如果a
是一个没有forEach
的NodeList
,只需执行:
Array.forEach.call(a, function(someA, i) { ... }
for (var i = 0; i < a.length; i++) {
function createCallback(i) {
return function(response) {
// i want here to have the current "i" here
}
}
calcRoute(fixedLocation, my_cities[i].address, createCallback(i));
}
相关文章:
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- 双“for”循环(循环)
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- Javascript在for循环中等待处理请求
- 我没有'I don’我不理解for在循环中的用途
- 为什么在 Javascript 中使用空的 for 循环 - for(;;).
- 错误后如何停止循环“FOR”
- 如何使用循环 for 与 java 脚本一起检查输入中的值
- 如何正确使用ngRepeat,同时使用循环for
- 是否可以使用循环(for/while)来制作动画?
- 在循环for循环时如何进入和退出
- Javascript原型循环for in数组
- 在对象数组中循环for
- Javascript循环:for循环工作,但不能映射
- 如何创建一个循环"for"在json