← 返回目录

11. setTimeout 延时定时器

setTimeout 就是"定个闹钟":到点之后只响一次。单位是毫秒(1000 毫秒 = 1 秒)。注意:它是"最早执行时间"不是精确时间——前面代码卡住了,它就得等着。

11.1 互动演示(延迟执行 + 清除)

延迟(毫秒):
点"开始延迟任务",到时间后只执行一次;点"取消"可阻止它执行。

11.2 知识点讲解

① 语法:两个参数 + 三种写法

// 语法:setTimeout(到点要干的事, 等多少毫秒)
// 它会吐回一个数字 ID,这个 ID 必须用变量接住,不然没法取消

// 写法一:直接塞一个匿名函数(最常用)
let timerId = setTimeout(function () {
  console.log("2秒后执行一次"); // 2000 毫秒就是 2 秒,到点喊我
}, 2000);

// 写法二:箭头函数写起来更短
let timerId2 = setTimeout( => {
  alert("3秒弹窗"); // 3 秒后弹个窗
}, 3000);

// 写法三:直接把函数名字传进去(注意:千万别加括号!)
function task() { console.log("执行任务"); }
let timerId3 = setTimeout(task, 1000); // 传 task 本人,1 秒后它自己跑

setTimeout(task, 1000) 传的是"函数本人";写 setTimeout(task(), 1000)(带了括号)会立刻执行 task,闹钟形同虚设——这是新手高频错误。

② 返回值是 ID:为什么必须用变量保存?

// 定一个闹钟,它会给你一个编号(比如 1、2、3…)
// 这编号就是"取消闹钟的遥控器",没它你按不下去
let timerId = setTimeout( => {
  console.log("不会执行了"); // 已经被取消,这行根本跑不到
}, 5000);

// 在响之前按遥控器取消它
clearTimeout(timerId); // 闹钟作废,到点不响了

没保存 ID = 无法取消 = 定时器失控。作业里"忘记保存定时器 ID 导致无法清除"就是专门考这个。

③ 补充说明:单位与"不精准"

// 单位是毫秒:1000 毫秒 = 1 秒
// 它说的"延迟 2 秒"是"最早 2 秒后",不是"分秒不差 2 秒":
// 前面要是还有一大堆代码在跑,它就得往后排队等
// 常拿来做:延迟提示、防抖、倒计时前的那一下等待

"延迟 2 秒"不是"保证第 2 秒整执行",而是"至少 2 秒后"——主线程忙完才轮得到它。

一句话记住:setTimeout 延迟执行一次、返回的 ID 必须存变量、clearTimeout(ID) 可以取消;延迟是最低等待时间不绝对精准