setTimeout 进阶详解

 一开始我以为当setTimeout的第二个参数设置为0是直接执行的, 但没想到结果却让我很以为, 打印出的结果是2,3,1

仔细一想确实是那么一回事,因为js是单线程的下面简单分析一下

setTimeout(function(){console.log(1)})
console.log(2)
console.log(3)

我们都知道,JavaScript是单线程的,这意味着所有任务都需要排队,前一个任务结束,才会执行下一个任务。如果 前一个任务耗时很长,后一个任务就不得不一直等着。

setTimeout(fn, millisec)  这个函数的正确解释是在js线程没有其他任务,处于空闲状态下,在millisec毫秒后执行fn函数

setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,尽可能早得执行。它在"任务队列"的尾部添加一个事件,因此要等到同步任务和"任务队列"现有的事件都处理完,才会得到执行。

那么 ,setTimeout()只是将事件插入了"任务队列",必须等到当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。要是当前代码耗时很长,有可能要等很久,所以并没有办法保证,回调函数一定会在setTimeout()指定的时间执行

发布了177 篇原创文章 · 获赞 875 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/github_35631540/article/details/103763193