setTimeout 是 JavaScript 中用于延迟执行单次任务的方法,接收函数、毫秒数及可选参数,返回可清除的定时器 ID,但执行时间受事件循环影响并不精确。

setTimeout 是 JavaScript 中最常用、最直接的延迟执行单次任务的方法。它会在指定的毫秒数后,调用一次你传入的函数(或执行一段代码字符串,但不推荐用字符串)。
基本用法:传入函数和延迟时间
语法很简单:
setTimeout(函数, 延迟毫秒数, ...参数)
说明:
- 第一个参数是你要延迟执行的函数(可以是匿名函数、具名函数或箭头函数);
- 第二个参数是延迟时间,单位是毫秒(例如 1000 表示 1 秒);
- 第三个及后续参数(可选)会作为实参,在延迟后传给目标函数。
常见写法示例
✅ 推荐:使用匿名函数或箭头函数包裹逻辑(清晰、安全)
立即学习“Java免费学习笔记(深入)”;
setTimeout(() => {
console.log('3秒后执行');
}, 3000);
✅ 传参方式(避免闭包陷阱)
const name = 'Alice';
setTimeout((n) => {
console.log(`你好,${n}`);
}, 1000, name); // 直接传入 name,而不是在箭头函数里引用外部变量
✅ 使用已定义的函数
function greet(person) {
console.log(`欢迎 ${person}!`);
}
setTimeout(greet, 2000, 'Bob');
注意:setTimeout 返回一个定时器 ID
它返回一个数字类型的 ID(如 1),可用于后续取消任务:
const timerId = setTimeout(() => {
console.log('这个不会执行了');
}, 5000);
// 在它触发前清除
clearTimeout(timerId);
这个 ID 在当前执行上下文中唯一,但只对单次任务有效 —— 它不会自动重复。
容易忽略的关键点
- 延迟时间不是精确值:受事件循环影响,实际执行可能稍晚(比如主线程正忙,回调会排队等待);
- 如果延迟设为 0,不代表立刻执行,而是“尽快”,通常会在当前同步任务结束后、下一轮宏任务开始时执行;
- 不要用字符串作为第一个参数(如
setTimeout("alert(1)", 100)),存在安全与作用域问题,已被现代规范弃用; - 在模块或类中使用时,注意
this指向 —— 箭头函数能自然继承外层this,普通函数则需显式绑定或用箭头函数。


















