setTimeout 进阶详解

举报
拿我格子衫来 发表于 2022/03/18 01:06:52 2022/03/18
【摘要】  一开始我以为当setTimeout的第二个参数设置为0是直接执行的, 但没想到结果却让我很以为, 打印出的结果是2,3,1 仔细一想确实是那么一回事,因为js是单线程的下面简单分析一下   setTimeout(function(){console.log(1)})console.log(2)console....

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

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

 


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

 

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

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

 

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

 

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

 

文章来源: fizzz.blog.csdn.net,作者:拿我格子衫来,版权归原作者所有,如需转载,请联系作者。

原文链接:fizzz.blog.csdn.net/article/details/103763193

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。