如何执行计时器变量并将Fired记录到控制台?

时间:2017-02-19 19:34:35

标签: javascript

var fireCount =0;
var start = new Date
var timer=setInterval(function () {
    if(new Date - start > 1000){
        clearInterval(timer)
        console.log('Fired ',fireCount)
    }
    fireCount++;
},0)
  

结果:被解雇770

     

我的期望:空白或无输出

尝试理解回调并在路上看到这个例子...有人可以解释何时调用计时器以及如何“解雇”'登录到控制台?

这是一个IFFE(立即调用函数表达式)的计时器吗?

我在这里错过了什么吗? setInterval是如何执行的?

以下两个函数变量有什么区别?

var timer=setInterval(function () {
    if(new Date - start > 1000){
        clearInterval(timer)
        console.log('Fired ',fireCount)
    }
    fireCount++;
},0)


var x=function () {
    console.log('x')
}

如果x没有打印定时器怎么打?

好吧,我进行了一些实验,并找到了,

var x=setInterval(function () {
    console.log('x')
})

按预期无限期地将x打印到控制台....

所以是因为回调等待事件队列中没有代码存在并因此执行了回调?

3 个答案:

答案 0 :(得分:0)

setInterval是函数获取functionnumber(代表ms)然后执行此函数evry n ms。

setInterval函数的返回值允许使用函数clearInterval取消此'循环'

答案 1 :(得分:0)

如果setInterval函数的interval参数小于10,默认设置为10ms。

在你的情况下每10ms你的功能被激活,只有770次你的条件是真的所以你可以看到登录控制台,  使用clearInterval终止计时器,因此不再调用该函数

答案 2 :(得分:0)

来自w3schools https://www.w3schools.com/jsref/met_win_setinterval.asp

  

setInterval()方法以指定的时间间隔(以毫秒为单位)调用函数或计算表达式。

也许在一开始就更清楚地看到这种形式:

var timer = setInterval(functToEvalueate(){..}, interval)

因为你作为间隔传递0,所以你是计时器每毫秒计算第一个参数,直到下面的表达式为真:

new Date - start > 1000