总所周知 js 里面的 setTimeout() 方法是用来设定某些功能在某段时间间隔之后执行的。但是今天看了高程对定时器的描述发现并不是这样。

setTimeout(function(){
//.code
}, 250);

如上设置一个延迟执行的函数,字面上理解是匿名函数体内的代码将会在 250毫秒后执行,但是事实并不是这样。

js 执行代码是单线程的,就是说只能逐个逐个执行(不知道说得对不对),将要执行的代码看成一条时间轴,首先执行的代码是script 标签内的一些对生命周期后面要用到的代码进行部署。当某段时间段空闲的时候,后面的代码才会被迅速被执行。举个例子:

例如现在脚本里有这样一堆代码:

var fn = function(){
//里面的代码执行了300毫秒
}(); setTimeout(function(){
//.code
}, 250); 

fn 这个自执行的函数执行的时候耗时300毫秒,然后才会到下面的 setTimeout 函数执行。

换句话说 setTimeout 函数的执行是当当前执行环境空闲的时候再延迟250毫秒执行自身的代码块,当执行完了 fn 函数之后,环境再开始执行setTimeout 函数。

所以setTimeout 这个函数实际上延迟了 300(fn 执行的时间) + 250(自身延迟时间)= 550毫秒 才被执行,有时候可能还会慢一点

最新文章

  1. 2015弱校联盟(1) - B. Carries
  2. AES对称加密和解密
  3. 嵌入式系统coredump设计
  4. 页面间(窗口间)的取值赋值及获取iframe下的window对象
  5. 在C/C++程序里打印调用栈信息
  6. Clean Code – Chapter 4: Comments
  7. 字符串处理-AC自动机
  8. UltraEdit破解方法最强收录
  9. Webpack 2 视频教程 013 - 自动分离 CSS 到独立文件
  10. WMI远程启动软件(某个应用程序)
  11. 一些Gym三星单刷的比赛总结
  12. IDEA Can't Update No tracked branch configured for branch master or the branch doesn't exist.
  13. 《笨方法学Python》加分题33
  14. python的小练习
  15. mysql脚本手动修改成oracle脚本
  16. ubuntu 设置github秘钥
  17. array_map 巧替 foreach
  18. Mybatis系列(五):mybatis逆向工程
  19. 批量生成文件夹内所有文件md5
  20. spoj 375 树链剖分 模板

热门文章

  1. 把web项目部署到tomcat上
  2. Linux下源码安装jdk
  3. Excel Application对象应用
  4. Codeforces gym102058 J. Rising Sun-简单的计算几何+二分 (2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2))
  5. CF1020B Badge 【模拟链表】
  6. AndroidManifest.xml文件详解(permission-group)
  7. BZOJ 2084 [Poi2010]Antisymmetry(manacher)
  8. BZOJ 2225 [Spoj 2371]Another Longest Increasing(CDQ分治)
  9. 重拾vue2
  10. Erlang学习记录(一)——Windows下的环境搭建