有一些会直接问定时器的机制,有一些是通过笔试题的方式问执行顺序然后问我为什么是这样。
长话短说,我们需要记住的是:因为js是单线程的,浏览器遇到setTimeout或者setInterval会先执行完当前的代码块,在此之前会把定时器推入浏览器的待执行事件队列里面,等到浏览器执行完当前代码之后会看一下事件队列里面有没有任务,有的话才执行定时器的代码。 所以即使把定时器的时间设置为0还是会先执行当前的一些代码。
划重点:简单来说就是浏览器会限制性当前代码,等当前的代码执行完了,会看一下有没有待执行的事件,如果有才执行定时器的代码