-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Labels
Description
前言
在开发场景中,我们经常会遇到间隔一段时间执行一次函数的情况。实际中,往往采用setInterval等计时器来实现,但是setTimeout和setInterval都是宏任务级别的,他们会将回调注册到队列,并在下一次符合时间条件的时机执行。
也就是说,他们不会立即执行,而是会先延迟一段时间后再执行。
解决方法
setInterval(func, delay)
setInterval(code, delay)
setTimeout(func, delay)
setTimeout(code, delay)
查阅文档可知,setTimeout / setInterval 除了能够注册回调外,还可以接受字符串代码(表达式),code会在主线程设定计时器时编译并执行。因此,我们可以定义一个函数,内部包含主要逻辑,同时在逻辑执行完毕后返回函数本身:
var data2=0;
var count2= function(){
console.log("count2:",data2++);
return count2; // 返回函数本身
}
setInterval(count2(),1000); // 执行到该语句时,会先执行一次函数,得到正确的回调函数,然后将回调函数注册