setTimeout在一个循环中全部同时执行

时间:2019-04-18 06:56:54

标签: javascript settimeout

我想每3秒打开一个链接。我正在使用setTimeout函数,但是它不起作用。所有链接将被打开一次。

for(var i=0; i < url.length-1; i++) {
  setTimeout(function(){
    linkaddress=url[i];
    window.open(linkaddress);
  }, 3000);
}

2 个答案:

答案 0 :(得分:1)

使用“ let”代替“ var”进行块级作用域,然后将时间乘以i变量(more info)。代码:

 var url = ["https://domain1.com","https://www.domain2.com"],
     timeout = 3; // Time in second

 for(let i=1; i <= url.length; i++){
   setTimeout(function(){
     linkaddress=url[i-1];
     window.open(linkaddress);
   }, i * timeout * 1000);
 }

编辑:请注意,此代码使用了EcmaScript 6个功能

答案 1 :(得分:0)

改用setInterval

url = ['a', 'b', 'c'];

var i = 0;
var interval = setInterval(function() {
  if (i <= url.length - 1) {
    ///linkaddress = url[i];
    //window.open(linkaddress);
    console.log(url[i]);
    i++;
  } else {
    clearInterval(interval);
  }
}, 3000);