setTimeout触发的方式不是用中断的方式,也就是setTimeout并不是我们所想象的那样是真正定时触发程序的,和真实值相比是有延时的,
setTimeout的js内部原理:
js内部自身维护一个数组,我们就命名为eventArray吧,当执行到setTimeout语句时,js就将setTimeout的回调函数推入eventArray同时记录了当前的时间戳和定时时间(intervalDate),因为js是单线程的程序,所以只有一个主程序在解析编译和运行代码,每当主程序空闲的时候会不断去访问eventArray,判断当前时间和eventArray内的成员的currentDate属性和当前时间戳间隔是否大于成员的intervalDate(当然这只是简单描述下实际机制比这个复杂),大于间隔就从数组中取出并执行callback。
setInterval 同理