JavaScript For循环仅针对迭代器的最后一个值执行
我正在尝试从一些网站下载文件,比如“website.com”。我拥有JavaScript For循环仅针对迭代器的最后一个值执行,javascript,arrays,closures,Javascript,Arrays,Closures,我正在尝试从一些网站下载文件,比如“website.com”。我拥有数组中的所有唯一ID 这是我写的代码: for(var i=0;i<ids.length;i++) { var timeInterval = 1000; (function(i,timeInterval){ setTimeout(function(){ var link = document.createElement('a'); link.h
数组中的所有唯一ID
这是我写的代码:
for(var i=0;i<ids.length;i++) {
var timeInterval = 1000;
(function(i,timeInterval){
setTimeout(function(){
var link = document.createElement('a');
link.href= "http://website.com/download/"+ids[i];
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
link.dispatchEvent(e);
console.log(ids[i]);
console.log(timeInterval);
}, timeInterval);
timeInterval = (i+1)*1000;
})(i,timeInterval);
}
for(var i=0;i您正在更新匿名函数末尾的“timeInterval”参数,虽然该语句没有任何错误,但没有任何好处-它更新“timeInterval”参数,而不是循环外的“timeInterval”变量。您可以将此作为一种替代方法:
for(var i=0;i<ids.length;i++) {
var timeInterval = (i + 1) * 1000;
(function(i,timeInterval){
setTimeout(function(){
var link = document.createElement('a');
link.href= "http://website.com/download/"+ids[i];
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
link.dispatchEvent(e);
console.log(ids[i]);
console.log(timeInterval);
}, timeInterval);
})(i,timeInterval);
}
for(var i=0;i您正在更新匿名函数末尾的“timeInterval”参数,虽然该语句没有任何错误,但没有任何好处-它更新“timeInterval”参数,而不是循环外的“timeInterval”变量。您可以将此作为一种替代方法:
for(var i=0;i<ids.length;i++) {
var timeInterval = (i + 1) * 1000;
(function(i,timeInterval){
setTimeout(function(){
var link = document.createElement('a');
link.href= "http://website.com/download/"+ids[i];
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
link.dispatchEvent(e);
console.log(ids[i]);
console.log(timeInterval);
}, timeInterval);
})(i,timeInterval);
}
for(var i=0;i您正在更新匿名函数末尾的“timeInterval”参数,虽然该语句没有任何错误,但没有任何好处-它更新“timeInterval”参数,而不是循环外的“timeInterval”变量。您可以将此作为一种替代方法:
for(var i=0;i<ids.length;i++) {
var timeInterval = (i + 1) * 1000;
(function(i,timeInterval){
setTimeout(function(){
var link = document.createElement('a');
link.href= "http://website.com/download/"+ids[i];
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
link.dispatchEvent(e);
console.log(ids[i]);
console.log(timeInterval);
}, timeInterval);
})(i,timeInterval);
}
for(var i=0;i您正在更新匿名函数末尾的“timeInterval”参数,虽然该语句没有任何错误,但没有任何好处-它更新“timeInterval”参数,而不是循环外的“timeInterval”变量。您可以将此作为一种替代方法:
for(var i=0;i<ids.length;i++) {
var timeInterval = (i + 1) * 1000;
(function(i,timeInterval){
setTimeout(function(){
var link = document.createElement('a');
link.href= "http://website.com/download/"+ids[i];
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
link.dispatchEvent(e);
console.log(ids[i]);
console.log(timeInterval);
}, timeInterval);
})(i,timeInterval);
}
用于(var i=0;i您正在模拟单击链接。单击链接会重新加载页面并停止脚本运行。我很惊讶浏览器允许您这样启动下载。我认为这是被禁止的,因为网站可以使用它触发数百次下载。@Barmar:chrome让您确认在2之后需要更多文件nd或3rd one下载。您正在模拟单击链接。单击链接会重新加载页面并停止脚本运行。我很惊讶浏览器允许您这样启动下载。我认为这是禁止的,因为网站可以使用它触发数百次下载。@Barmar:chrome让您确认您需要更多的下载在第二次或第三次下载后出现es。您正在模拟单击链接。单击链接会重新加载页面并停止脚本运行。我很惊讶浏览器允许您这样启动下载。我认为这是禁止的,因为网站可以使用它触发数百次下载。@Barmar:chrome让您确认您在第二次或第三次下载后需要更多文件。您正在模拟单击链接。单击链接会重新加载页面并停止脚本运行。我很惊讶浏览器允许您这样启动下载。我认为这是禁止的,因为网站可以使用它触发数百次下载。@Barmar:chrome让您n确认在第二个或第三个链接下载后,您需要更多的文件。我想他仍然会遇到我在评论中提到的问题。唯一的区别是,它将加载第一个链接而不是最后一个链接。@如果这些链接是返回附件的内容(例如,要下载的文件),Barmar很好,那么它就可以工作了。如果链接下载文件,它就不会重新加载页面,是吗?但是,为什么下载不会这样工作呢?我不明白。我能做些什么吗?OP还可以调整传递给setTimeout的时间间隔:…},timeInterval*I);
。我想他还是会遇到我在评论中提到的问题。唯一的区别是它会加载第一个链接而不是最后一个链接。@Barmar如果这些链接是返回附件的东西(例如,要下载的文件),那么它就可以工作了。如果链接下载文件,它就不会重新加载页面,是吗?但是,为什么下载不会这样工作呢?我不明白。我能做些什么吗?OP还可以调整传递给setTimeout的时间间隔:…},timeInterval*I);
。我想他还是会遇到我在评论中提到的问题。唯一的区别是它会加载第一个链接而不是最后一个链接。@Barmar如果这些链接是返回附件的东西(例如,要下载的文件),那么它就可以工作了。如果链接下载文件,它就不会重新加载页面,是吗?但是,为什么下载不会这样工作呢?我不明白。我能做些什么吗?OP还可以调整传递给setTimeout的时间间隔:…},timeInterval*I);
。我想他还是会遇到我在评论中提到的问题。唯一的区别是它会加载第一个链接而不是最后一个链接。@Barmar如果这些链接是返回附件的东西(例如,要下载的文件),那么它就可以工作了。如果链接下载文件,它就不会重新加载页面了,是吗?但是,为什么下载不会这样工作呢?我不明白。我能做些什么吗?OP还可以调整传递给setTimeout的时间间隔:…},timeInterval*I);
。