setTimeout(function(){}, 0);
1 for (var i = 0; i < 3; i++) { 2 setTimeout(function() { 3 console.log(i); 4 }, 0); 5 console.log(i); 6 }
结果是:
0 1 2 3 3 3
分析:
1、在实践中,setTimeout 会在其完成当前任何延迟事件的事件处理器的执行,以及完成文档当前状态更新后,告诉浏览器去启用 setTimeout 内注册的函数。
2、setTimeout是异步的。正确的理解setTimeout的方式(注册事件):
有两个参数,第一个参数是函数,第二参数是时间值。
调用setTimeout时,把函数参数,放到事件队列中。等主程序运行完,再调用。
原题等价于:
1 var i = 0; 2 setTimeout(function() { 3 console.log(i); 4 }, 0); 5 console.log(i); 6 i++; 7 setTimeout(function() { 8 console.log(i); 9 }, 0); 10 console.log(i); 11 i++; 12 setTimeout(function() { 13 console.log(i); 14 }, 0); 15 console.log(i); 16 i++;
因为setTimeout是注册事件。根据前面的讨论,可以都放在后面。
原题又等价于如下的写法:
1 var i = 0; 2 console.log(i); 3 i++; 4 console.log(i); 5 i++; 6 console.log(i); 7 i++; 8 setTimeout(function() { 9 console.log(i); 10 }, 0); 11 setTimeout(function() { 12 console.log(i); 13 }, 0); 14 setTimeout(function() { 15 console.log(i); 16 }, 0);
参考资料:【http://www.qdfuns.com/notes/17398/e8a1ce8f863e8b5abb530069b388a158/page/3.html#tagsbar】
转载于:https://www.cnblogs.com/softwarefang/p/6611759.html
setTimeout(function(){}, 0);相关推荐
- setTimeout延时0毫秒的作用
经常看到setTimeout延时0ms的javascript代码,感到很迷惑,难道延时0ms和不延时不是一个道理吗?后来通过查资料以及实验得出以下两个作用 1.实现javascript的异步: 正常情 ...
- setTimeout(fn,0)
我们都知道setTimeout是一个延迟执行的函数 console.log(1); setTimeout(function(){console.log(2);},1000); console.log( ...
- 【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用
在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); 1 $.fn = { 2 ready: function(callback){ 3 ...
- JavaScript下的setTimeout(fn,0)的作用,涨知识了
单线程的javascript 首先我们来看浏览器下的JavaScript: 浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:javascript引擎线程,G ...
- JavaScript下的setTimeout(fn,0)意味着什么?
近期在研究异步编程的我对于setTimeout之类的东西异常敏感.在SegmentFault上看到了一个问题<关于SetTimeout时间设为0时>:提问者读了一篇文章,原文解释setTi ...
- settimeout(fn(),0)
settimeout(fn(),0) 总所周知,settimeout 函数是用来做延时的,如 settimeout(()=>{console.log('show content')},1000) ...
- settimeout( )是全局函数吗_JS函数的执行
js 在不同时机运行,会有不同的运行结果,本文将分别举例分析 案例1 只有在调用fn()时函数才开始执行 函数可以调用全局变量a 案例2 再次声明,在调用fn()是才开始执行函数,所以执行完 a=2后 ...
- 你所不知道的setTimeout
JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务.初始接触它的人都觉得好简单 ...
- 探索setTimeout
其实说起JavaScript中的定时器(Timer)中的 setTimeout() 方法,从事开发的同学想必都不会陌生,觉得这些东西很简单很基础.但是有时候恰恰是基础简单的东西,才越容易被忽略.先看一 ...
最新文章
- 千万别只顾着代码不上厕所
- C#请求Post接口
- Transformer在图像复原领域的降维打击,ETH提出SwinIR:各项任务全面领先
- 轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
- 《算法竞赛入门经典》 例题 4-4 信息编码 (Message Decoding,ACM,ICPC World Finals 1991,UVa 213)
- linux系统编程:自己动手写一个who命令
- 在SAP除了使用Cordova生产移动应用外,还有这种方式
- 论文浅尝 | 基于图匹配神经网络的跨语言知识图对齐 (ACL 2019)
- TensorFlow学习笔记03:单变量线性回归
- python新线程打开cmd_Python – 函数无法在新线程中运行
- html和css的重难点知识
- PostgreSQL【表】
- CSL:圆形平滑标签的任意方向目标检测
- 运行 CTS 测试命令
- 分贝测试软件哪个好 家庭影院,家庭影院隔音怎么做效果最好 这7个解决方案你一定要知道...
- 李丽云为什么选择肖志军?
- Python机器学习入门笔记(1)—— Scikit-learn与特征工程
- Understanding Maximum-a-Posteriori (MAP) Estimation
- 【网红流水线车间】“制造”李佳琦们的神秘组织,到底是怎么让网红火起来的?...
- 数据分析之pandas学习笔记(六)(层次化索引、重塑、轴向旋转、行列变换、合并表数据)