【笔记】js 关于定时器的理解
2024-08-27 07:25:33
总所周知 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毫秒 才被执行,有时候可能还会慢一点
最新文章
- 2015弱校联盟(1) - B. Carries
- AES对称加密和解密
- 嵌入式系统coredump设计
- 页面间(窗口间)的取值赋值及获取iframe下的window对象
- 在C/C++程序里打印调用栈信息
- Clean Code – Chapter 4: Comments
- 字符串处理-AC自动机
- UltraEdit破解方法最强收录
- Webpack 2 视频教程 013 - 自动分离 CSS 到独立文件
- WMI远程启动软件(某个应用程序)
- 一些Gym三星单刷的比赛总结
- IDEA Can't Update 	No tracked branch configured for branch master or the branch doesn't exist.
- 《笨方法学Python》加分题33
- python的小练习
- mysql脚本手动修改成oracle脚本
- ubuntu 设置github秘钥
- array_map 巧替 foreach
- Mybatis系列(五):mybatis逆向工程
- 批量生成文件夹内所有文件md5
- spoj 375 树链剖分 模板
热门文章
- 把web项目部署到tomcat上
- Linux下源码安装jdk
- Excel Application对象应用
- Codeforces gym102058 J. Rising Sun-简单的计算几何+二分 (2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2))
- CF1020B Badge 【模拟链表】
- AndroidManifest.xml文件详解(permission-group)
- BZOJ 2084 [Poi2010]Antisymmetry(manacher)
- BZOJ 2225 [Spoj 2371]Another Longest Increasing(CDQ分治)
- 重拾vue2
- Erlang学习记录(一)——Windows下的环境搭建