setTimeout 和 setInterval 功能
setTimeout()
会在确定的时间调用回调函数,且回调函数只会执行一次。
setInterval()
会重复调用一个函数,在每次调用之间具有固定的时间延迟。
为什么要模拟
为什么使用setTimeout
模仿setInterval
呢?这需要通过事件循环机制来解释,如果不清楚的话可以点击查看事件循环机制和浏览器内核相关内容。
由于setInterval
或setTimeout
不是 JS 中定义的,他们并不会在 JS 引擎线程中直接执行。当代码执行到setInterval
或setTimeout
时,事件循环机制会为setTimeout
或setInterval
开一个定时器线程并开始计时,等定义的时间过后,将回调函数放到回调队列里,等到函数调用栈空(JS
引擎线程空闲)时,将回调函数放入函数调用栈(使用 JS 引擎线程)执行。