Skip to content

setInterval & setTimeout 立即执行 #63

@jtwang7

Description

@jtwang7

前言

在开发场景中,我们经常会遇到间隔一段时间执行一次函数的情况。实际中,往往采用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); // 执行到该语句时,会先执行一次函数,得到正确的回调函数,然后将回调函数注册

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions