Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript For循环仅针对迭代器的最后一个值执行_Javascript_Arrays_Closures - Fatal编程技术网

JavaScript For循环仅针对迭代器的最后一个值执行

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

我正在尝试从一些网站下载文件,比如“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.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);