setTimeout 就是"定个闹钟":到点之后只响一次。单位是毫秒(1000 毫秒 = 1 秒)。注意:它是"最早执行时间"不是精确时间——前面代码卡住了,它就得等着。
// 语法: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,闹钟形同虚设——这是新手高频错误。
// 定一个闹钟,它会给你一个编号(比如 1、2、3…)
// 这编号就是"取消闹钟的遥控器",没它你按不下去
let timerId = setTimeout( => {
console.log("不会执行了"); // 已经被取消,这行根本跑不到
}, 5000);
// 在响之前按遥控器取消它
clearTimeout(timerId); // 闹钟作废,到点不响了
没保存 ID = 无法取消 = 定时器失控。作业里"忘记保存定时器 ID 导致无法清除"就是专门考这个。
// 单位是毫秒:1000 毫秒 = 1 秒 // 它说的"延迟 2 秒"是"最早 2 秒后",不是"分秒不差 2 秒": // 前面要是还有一大堆代码在跑,它就得往后排队等 // 常拿来做:延迟提示、防抖、倒计时前的那一下等待
"延迟 2 秒"不是"保证第 2 秒整执行",而是"至少 2 秒后"——主线程忙完才轮得到它。