setInterval中进行循环时间隔时间不对

clipboard.png

以上全部JS代码,想要实现的是每隔2秒,text文本变化一次,但是在每次轮询完focusText数组之后,也就是text从“EXPLORE”变为“TIME”时,间隔时间会超过2秒,请问这是为什么?

阅读 4.1k
4 个回答

数组越界了,应该是

i++
if (i >= focusText.length) {
 i = 0
}
// 使用i<focusText时,i的范围是[0, 1, 2, ..., focus.length],正确的应该是[0, 1, 2, ..., focus.length - 1]
if (i < focusText.length - 1) { 
 i++
}

看了前面的答案,好像没答到点子上...

======================

setInterval的行为是每隔一定时间,将回调函数放入队列。至于何时能执行回调函数,取决于之前的代码执行时间。

最理想的情况是前面没有正在执行的代码,那么就可以立即执行回调函数了,不过即使这样时间也不是准确的2秒,总是要多一些的

这是逻辑错误,你的i的范围是[0, focusText.length],而不是[0, focusText.length)。觉得代码不按自己想的那样跑就console.log,打印调试信息是最基本的debug方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题