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打印到控制台....
所以是因为回调等待事件队列中没有代码存在并因此执行了回调?
答案 0 :(得分:0)
setInterval
是函数获取function
和number
(代表ms)然后执行此函数evry n
ms。
setInterval
函数的返回值允许使用函数clearInterval
取消此'循环'
答案 1 :(得分:0)
如果setInterval函数的interval参数小于10,默认设置为10ms。
在你的情况下每10ms你的功能被激活,只有770次你的条件是真的所以你可以看到登录控制台, 使用clearInterval终止计时器,因此不再调用该函数
答案 2 :(得分:0)
setInterval()方法以指定的时间间隔(以毫秒为单位)调用函数或计算表达式。
也许在一开始就更清楚地看到这种形式:
var timer = setInterval(functToEvalueate(){..}, interval)
因为你作为间隔传递0,所以你是计时器每毫秒计算第一个参数,直到下面的表达式为真:
new Date - start > 1000