setTimeout和setInterval

计划调用( scheduling a call)
等待特定一段时间后再执行函数

1. 引用函数只用名字,不用加括号(加了括号==调用函数)

2. setTimeout 取消=> cleartimeout setInterval 取消=> clearInterval

3. alert弹窗时计时器仍在工作

4. 嵌套setTimeout比setInterval更灵活:精准设置两次执行间的延时

/** instead of:
let timerId = setInterval(() => alert('tick'), 2000);
*/

let timerId = setTimeout(function tick() {
  alert('tick');
  timerId = setTimeout(tick, 2000); // (*)
}, 2000);

-----------------------------------------------

let delay = 5000;

let timerId = setTimeout(function request() {
  ...发送请求...

  if (request failed due to server overload) {
    // 下一次执行的间隔是当前的 2 倍
    delay *= 2;
  }

  timerId = setTimeout(request, delay);

}, delay);

5. setInterval中实际调用的间隔要比设置的间隔短

因为func的执行时间“消耗”了一部分间隔时间

setInterval.png
嵌套setTimeout.png
任务.png
function printNumbers(from, to){
  let delay = 1000;
  let timer = setInterval(
    ()=>{
      while (to >= from){
        alert(from ++)
      }
    }, delay
  )
}

function printNumbers(from, to){
  let delay = 1000;
  let timer = setTimeout(function run(){
    if(to >= from){
      alert(from ++)
    }
    setTimeout(run, delay)
  }, delay
  )
}

文章参考(答案详情)https://zh.javascript.info/settimeout-setinterval

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容