setTimeout
window.setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
语法
let timeoutId = window.setTimeout(func [, delay, param1, param2, ...]);
let timeoutId = window.setTimeout(func [, delay]);
let timeoutId = window.setTimeout(code [, delay]);
参数
| 参数 | 描述 | 
|---|---|
| timeoutId | 定时器的唯一辨识符,可以作为参数传给 clearInvterval() | 
| func | 需要重复调用的函数 | 
| code | 是另一种语法的应用,是指你想重复执行的一段字符串构成的代码(不推荐使用,不推荐的原因和 eval()一样) | 
| delay | 是每次延迟的毫秒数(一秒等于 1000 毫秒),函数的每次调用会在该延迟之后发生。和 setTimeout一样,实际的延迟时间可能会稍长一点 | 
| param | 传入调用函数的参数 | 
停止超时调用
使用 clearTimeout(timeId) 可以停止间歇调用定时器(定时器还在,只是没调用)。
示例
基本用法
// 超时调用函数
const animate = function () {
  console.log('超时调用');
};
// 超时调用定时器(经过500毫秒后执行一次animate函数)
const timeoutID = setTimeout(animate, 500);
// 清除超时调用
clearTimeout(timeoutID);
实现间歇调用
window.timeWorkers = {};
const _setInterval = function (cb, time) {
  let key = Symbol('interval');
  const execute = function (fn, time) {
    timeWorkers[key] = setTimeout(function () {
      fn();
      execute(fn, time);
    });
    return key;
  };
  execute(cb, time);
};
const _clearInterval = function (key) {
  if (key in window.timeWorkers) {
    clearTimeout(timeWorkers[key]);
    delete timeWorkers[key];
  }
};