JavaScript定时器基于事件循环异步调度,setTimeout执行一次,setInterval重复执行;两者均不精确,需用clearTimeout/clearInterval清理,避免字符串传参和立即调用函数。
JavaScript 定时器不是“精确钟表”,而是基于事件循环的异步调度机制。它们把回调函数放入任务队列,等主线程空闲时才执行,所以实际延迟可能略大于设定值。
它在指定毫秒数后,将回调函数推入宏任务队列,仅触发一次。适合做延时初始化、防抖、倒计时结束动作等。
setTimeout(callback, delay, ...args) —— 推荐传函数引用,支持直接传参(不用包装函数)clearTimeout(id)
它从启动起,每隔指定毫秒就尝试将回调推入宏任务队列,持续运行,直到被手动清除。适合轮询、动画帧模拟、实时状态刷新等。
setInterval(callback, interval, ...args)
clearInterval(id) 停止,否则会一直占用资源两者都返回数字类型的定时器 ID,但语义和生命周期完全不同:
避免这些写法能减少 Bug:
setTimeout("func()", 1000)),存在安全与性能问题,已不被推荐setTimeout(func(), 1000)(带括号),这会立即执行 func 并传回返回值,而非函数本身