JavaScript 关于setTimeout与setInterval的小研究
说明 在开发功能“轨迹播放”时,遇到了一个情况。 原先同事已经开发了一版,这次有个新功能:点击线上任意一点后可以从点击处重新播放。 看了一下原来的版本,发现同时使用了setTimeout和setInterval,两者配合实现点线播放。 简单结构如下 function test() { setInterval(function () { console.log("interval"); //省略插值方法得到arr (...) play(arr); }, 2000); } function play(arr) { setTimeout(function () { play(arr); console.log("setTimeout"); }, 40); } 我觉得这个结构欠妥,两个定时器配合必定会出现失误!因此重构了一版,将两个定时器改为一个,用setInterval解决。 但是此时我并不知道欠妥欠在什么地方,缺乏理论支持,现在闲下来仔细研究了一下 找问题 在仔细研究了旧版本后,我先把旧版本结构扒了出来,排除其他因素,自己模拟了一个简单版(就是上面的代码) setTimeout:在执行时,是在载入后延迟指定时间后,去执行一次表达式,仅执行一次 setInterval:在执行时,它从载入后,每隔指定的时间就执行一次表达式 实验一:在使用setInterval和setTimeout方法上