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];
}
};