🧑🎓 个人主页:《爱蹦跶的大A阿》
🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》
✨ 前言
setTimeout() 和 setInterval() 是 JavaScript 中非常常用的定时函数。合理运用它们可以实现代码的定时执行。
但 setTimeout() 和 setInterval() 在使用方式和实现原理上有一些不同。本文将详细对比两者的区别,分析使用场景,帮你深入理解定时函数的精髓。
✨ 正文
一、setTimeout() 简介
setTimeout() 用来设置一个定时器,该定时器在定时时间到达后执行提供的回调函数。
setTimeout() 的基本语法如下:
let timeoutId = setTimeout(callback, delay);
其中 callback 是定时器触发后需要执行的函数,delay 是时间间隔,单位是毫秒。
setTimeout() 会返回该定时器的 ID。可以通过 clearTimeout() 来取消定时器。
setTimeout()函数用来设置一个定时器,该定时器在设定的毫秒数后执行提供的函数。
setTimeout()函数的语法如下:
let timeoutId = setTimeout(function[, delay, param1, param2, ...])
参数说明:
- function:必需,要执行的函数名或函数对象。
- delay:可选,定时器延迟的毫秒数,默认是0。
- param1,param2:可选,传递给函数的参数。
setTimeout()返回一个timeoutId,标识该定时器,可以传入clearTimeout()来取消定时器。
使用示例:
function printHello(){
console.log('Hello World');
}
let timeoutId = setTimeout(printHello, 2000);
clearTimeout(timeoutId);
上面代码会在2秒后执行printHello函数。
setTimeout()的一些注意事项:
- 延时时间不是准确时间,可能受其它代码影响。
- 回调函数会阻塞进程,如果回调函数耗时太长会有问题。
- 参数需要正确传递,否则可能会出错。
- 使用后需要清除定时器,否则会占用资源。
综合来说,setTimeout()是一个非常常用的定时函数,但需要注意一些使用细节。
二、setInterval() 简介
setInterval() 也是用来设置定时器的,但是它会每隔一定时间重复执行提供的回调函数。
setInterval() 的基本语法如下:
let intervalId = setInterval(function, delay, param1, param2, ...)
callback 函数会每隔 delay 毫秒重复执行。和 setTimeout() 一样,它也会返回定时器 ID,可以通过 clearInterval() 来取消定时器。
参数说明:
- function: 必需,要重复调用的函数。
- delay: 可选,每次调用之间的时间间隔,单位是毫秒。
- param1,param2: 可选,传递给函数的参数。
setInterval()会返回一个intervalId,可以用clearInterval()来取消定时器。
使用示例:
let count = 0;
let max = 10;
function printCount(){
console.log(count);
count++;
if(count === max){
clearInterval(intervalId);
}
}
let intervalId = setInterval(printCount, 1000);
这段代码会每隔1秒调用printCount函数,从0开始重复计数到10,然后清除定时器。
setInterval()的注意事项:
- 间隔时间有可能不准确。
- 回调函数运行时可能会 exceeding 间隔时间。
- 必须清除不再需要的间隔定时器。
- 回调函数耗时太长会影响间隔定时。
总之,setInterval()可以实现定时重复执行代码,但是需要考虑定时不准确、回调函数执行时间等问题。
三、setTimeout() vs setInterval()
setTimeout() 和 setInterval() 主要有以下区别:
- setTimeout() 只执行一次,setInterval() 会重复执行
- setTimeout() 延时时间到了就执行,setInterval() 是从开始时间每隔一段时间就执行
- setInterval() 可能出现累积延迟的问题
不同场景使用:
- 只需要延迟执行可以使用 setTimeout()
- 需要循环执行就使用 setInterval()
使用注意事项
setTimeout() 和 setInterval() 在使用时有以下注意事项:
- 传入的延时时间不是精确时间,受其他任务影响
- 回调函数会阻塞进程,如果耗时太长会有问题
- 参数和调用方式需要正确,否则可能存在逻辑错误
- 必须清除不再需要的定时器,否则会消耗系统资源
替代方案
比较理想的定时执行方案是使用 requestAnimationFrame() 代替 setTimeout() 和 setInterval()。
优点是由系统控制次数,循环调用更流畅,性能也更好。
✨ 结语
setTimeout() 和 setInterval() 是 JavaScript 实现定时执行非常重要的工具。但是需要注意一些使用问题,例如延时不精确、回调阻塞及资源消耗等。理解它们的实现差异,使用最佳实践,可以编写出性能更好的 JavaScript 代码。