2026-10-20 15:39:30
在JavaScript中,setTimeout()用于在指定延迟后执行函数或代码块,其核心用法包括基本延迟、参数传递、取消定时器、重复执行、循环处理、性能优化及异步操作管理。 以下是具体实现方法与注意事项:
1. 基本用法setTimeout()接收两个参数:回调函数和延迟时间(毫秒)。
setTimeout(() => { console.log('Hello, World!');}, 1000); // 1秒后输出2. 传递参数通过箭头函数或匿名函数传递参数,避免直接传参导致的立即执行问题。
let name = 'John';setTimeout(() => { console.log(`Hello, ${name}!`); // 2秒后输出个性化问候}, 2000);3. 取消定时器setTimeout()返回唯一ID,可通过clearTimeout()取消未执行的定时器。
let timerId = setTimeout(() => { console.log('This will not execute');}, 3000);clearTimeout(timerId); // 取消定时器4. 重复执行通过递归调用setTimeout()模拟setInterval()的重复执行效果,避免累积延迟问题。
function repeatMessage() { console.log('Repeating message...'); setTimeout(repeatMessage, 1000); // 每隔1秒重复执行}repeatMessage();5. 循环中使用IIFE(立即执行函数):捕获每次循环的变量值。for (let i = 0; i < 5; i++) { (function(index) { setTimeout(() => { console.log(index); // 输出0到4 }, index * 1000); })(i);}
直接使用let(现代JS推荐):每次迭代创建新绑定。for (let i = 0; i < 5; i++) { setTimeout(() => { console.log(i); // 输出0到4 }, i * 1000);}
高频操作(如动画)优先使用requestAnimationFrame替代setTimeout(),减少性能损耗。
function animate() { // 动画逻辑 requestAnimationFrame(animate); // 浏览器刷新率同步执行}animate();7. 异步操作管理通过掌握上述方法,可灵活应用setTimeout()实现延迟、重复、异步等操作,同时规避常见陷阱,提升代码健壮性。