我正在处理的程序有一个数组,里面有一堆网址,例如:
var urls = ["http://www.url.com/page1", "http://www.url.com/page2", "http://www.url.com/page3"];
然后我循环遍历这个数组,以便根据每个网址运行一些代码:
for (var i = 0; i < urls.length; i++) {
$.get(urls[i], function(response) {
console.log(urls[i]);
});
我正在使用 $.get 从站点上的另一个页面提取数据,我的问题是 console.log 显示未定义?更奇怪的是,如果我将 url[1] 或任何值作为数字传递到 console.log,那么它会从数组中返回 url 吗?
此外,如果我像这样记录当前的 for 循环索引
console.log([i]);
然后它只输出 3,三次。
最佳答案
您需要一个闭包来保存 i 变量。变量的竞争是全局的,当 for 结束时,该值是 urls.length + 1。相反,如果您在 IIFE 中关闭代码您保留了变量的值,因为它获得了函数作用域。
您可以使用现代浏览器
let instead of var: declares a block scope local variable, optionally initializing it to a value.
改变:
for (var i = 0; i < urls.length; i++) {
$.get(url[i], function(response) {
console.log(urls[i]);
});
收件人:
for (var i = 0; i < urls.length; i++) {
(function (i) {
$.get(url[i], function(response) {
console.log(urls[i]);
});
})(i);
关于javascript - 数组索引在 $.get 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063678/