for循环里xhr.onload回调i的值固定
时间: 2024-09-14 07:13:14 浏览: 21
在JavaScript中,for循环中使用xhr.onload回调函数时,可能会遇到一个常见的问题,即循环结束后,回调函数中的变量i的值是循环的最后一个值。这是因为JavaScript的闭包(closure)行为,循环结束后,变量i的值已经变成了循环的终值,而 xhr.onload 可能是在循环结束后才执行的异步操作。
为了确保每个 xhr.onload 都能得到正确的索引值,可以创建一个新的作用域来保存每次循环的i值,通常的做法是创建一个立即执行的函数表达式(IIFE),如下所示:
```javascript
var xhrs = []; // 假设这是一个存放XMLHttpRequest对象的数组
for(var i = 0; i < someLength; i++) {
xhrs[i] = new XMLHttpRequest();
xhrs[i].onload = (function(index) {
return function() {
// 这里的index就是我们期望的i的值
console.log("处理异步响应的索引为: " + index);
};
})(i);
// 发起请求等其他操作...
}
```
在上面的代码中,我们通过一个匿名函数立即执行了一个闭包,并且将当前的循环变量i作为参数传递给这个函数。这个闭包会捕获每次循环时的i值,从而使得每个xhr.onload回调函数中的`index`变量都能保持正确的值。