setTimeout()和setInterval()经常被用来处理延时和定时任务。setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则可以在每隔指定的毫秒数循环调用函数或表达式,直到clearInterval把它清除。

JavaScript其实是运行在单线程的环境中的,这就意味着定时器仅仅是计划代码在未来的某个时间执行,而具体执行时机是不能保证的,因为页面的生命周期中,不同时间可能有其他代码在控制JavaScript进程。在页面下载完成后代码的运行、事件处理程序、Ajax回调函数都是使用同样的线程,实际上浏览器负责进行排序,指派某段程序在某个时间点运行的优先级

我们可以可以把JavaScript想象成在时间线上运行。当页面载入的时候首先执行的是页面生命周期后面要用的方法和变量声明和数据处理,在这之后JavaScript进程将等待更多代码执行。当进程空闲的时候,下一段代码会被触发

除了主JavaScript进程外,还需要一个在进程下一次空闲时执行的代码队列。随着页面生命周期推移,代码会按照执行顺序添加入队列,例如当按钮被按下的时候他的事件处理程序会被添加到队列中,并在下一个可能时间内执行。在接到某个Ajax响应时,回调函数的代码会被添加到队列。JavaScript中没有任何代码是立即执行的,但一旦进程空闲则尽快执行。定时器对队列的工作方式是当特定时间过去后将代码插入,这并不意味着它会马上执行,只能表示它尽快执行。

关于setTimeout/setInterval执行时机详细说明可以看看 setTimeout()和setInterval() 何时被调用执行

最新文章

  1. 初识Git
  2. Linux – Usermod命令参数解析和实例说明
  3. jquery-easyui 树的使用笔记
  4. css div上下左右居中
  5. 远程连接服务器for Linux
  6. 《你必须知道的.NET》书中对OCP(开放封闭)原则的阐述
  7. sql date()函数
  8. artDialog ( v 6.0.2 ) content 参数引入页面 html 内容
  9. B树和B+树的总结
  10. Maven 工程 如何添加 oracle 驱动 问题
  11. mysql ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constrain fails
  12. eclipse使用maven打包的时候发现静态资源没包含进去
  13. JavaScript学习总结(六)——前端模块化开发
  14. 关于“用VS2010的C++导入ADO导入不了,提示无法打开源文件msado15.tlh”的问题
  15. IGMP Internet组管理协议 未完
  16. 【Postgresql】use
  17. LocalStorage漏洞分析
  18. Angular路由参数传递
  19. js颜色选择器 制作分析
  20. HTTP和HTTPS的区别?

热门文章

  1. MySQL锁系列1
  2. android:layout_weight总有你不知道的用法.
  3. ROC和AUC介绍以及如何计算AUC
  4. Helpers\Number
  5. linux自带抓包工具tcpdump使用说明
  6. Java中数组的快排
  7. 关于Servlet会话跟踪的那些事儿
  8. 计算 MD5值
  9. jar包冲突解决方法
  10. maven管理多模块系统