为什么setInterval调用带有随机参数的函数?
时间:2020-03-05 18:59:39 来源:igfitidea点击:
所以,我看到一个奇怪的问题。如果我有功能
// counter wraps around to beginning eventually, omitted for clarity. var counter; cycleCharts(chartId) { // chartId should be undefined when called from setInterval console.log('chartId: ' + chartId); if(typeof chartId == 'undefined' || chartId < 0) { next = counter++; } else { next = chartId; } // ... do stuff to display the next chart }
可以通过用户操作显式调用此函数,在这种情况下,会将" chartId"作为参数传入,并显示选定的图表;或者它可以处于自动播放模式,在这种情况下,它由一个setInterval调用,该setInterval由以下内容初始化:
var cycleId = setInterval(cycleCharts, 10000);
奇怪的是,即使从setInterval调用它,我实际上仍在看到cycleCharts()
得到chartId
参数! setInterval甚至没有传递给cycleCharts函数的任何参数,因此,对于从setInterval中调用cycleCharts
时为什么未定义chartId
感到困惑。
解决方案
回答
setInterval是为cycleCharts馈送实际的时序数据(因此可以计算出它的实际运行时间,并用于产生较小的响应,大多数情况下在动画中很实用)
你要
var cycleId = setInterval(function(){ cycleCharts(); }, 10000);
(此行为可能未标准化,因此不要过于依赖它)
回答
var cycleId = setInterval(cycleCharts,10000,4242);
从第三个参数开始,它们被传递到函数中,因此在我的示例中,我们将4242作为chartId发送。我知道这可能不是我们提出的问题的答案,但可能是问题的解决方案?我认为在传递/调用该方法时,它从堆栈上的任何内容获取的值都是随机的。
回答
它告诉我们回调被延迟了几毫秒。