循环中的setTimeout同时执行所有[重复]

问题描述 投票:0回答:2

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

for(var i=0; i < url.length-1; i++) {
  setTimeout(function(){
    linkaddress=url[i];
    window.open(linkaddress);
  }, 3000);
}
javascript settimeout
2个回答
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功能


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);
© www.soinside.com 2019 - 2024. All rights reserved.