一,这两个东西用得最多的是在动画。setTimeout 一般是递归调用,来实现循环。不必维护setTimeout句柄,因为只是调用一次执行一次。setInterval 调一次执行多次,一般要维护setInterval句柄,除非你不想关掉它。所以根据这一点来说,setInterval性能肯定要高。因为setTimout想要实现循环,必须不停地创建,释放,创建。。。而setInterval不用。
二,setTimeout被用得更广泛。前面说了,它的效率低,为何还用得比较广泛呢?原因在于,setInterval不安全。setInterval 会每隔设定的时间间隔,向一个队列里面压入我们的逻辑方法。当这个方法执行完了后会自己出队列。要是这个方法执行得很久,且时间间隔又相对较小,那么这个队列就会很长,以至于耗尽内存。这也是各种大牛不愿使用setInterval的原因。
三,二者的时间间隔调用都是不精确的。都要等实际的代码执行完后才调用。比如setTimout所掉的方法需要执行1000ms,但是setTimeout的时间间隔为10ms,那么它至少也要等1000ms甚至更久才能再次调用。