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);相关推荐

  1. setTimeout延时0毫秒的作用

    经常看到setTimeout延时0ms的javascript代码,感到很迷惑,难道延时0ms和不延时不是一个道理吗?后来通过查资料以及实验得出以下两个作用 1.实现javascript的异步: 正常情 ...

  2. setTimeout(fn,0)

    我们都知道setTimeout是一个延迟执行的函数 console.log(1); setTimeout(function(){console.log(2);},1000); console.log( ...

  3. 【 js 基础 】【 源码学习 】 setTimeout(fn, 0) 的作用

    在 zepto 源码中,$.fn 对象 有个 ready 函数,其中有这样一句 setTimeout(fn,0); 1 $.fn = { 2 ready: function(callback){ 3 ...

  4. JavaScript下的setTimeout(fn,0)的作用,涨知识了

    单线程的javascript 首先我们来看浏览器下的JavaScript: 浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:javascript引擎线程,G ...

  5. JavaScript下的setTimeout(fn,0)意味着什么?

    近期在研究异步编程的我对于setTimeout之类的东西异常敏感.在SegmentFault上看到了一个问题<关于SetTimeout时间设为0时>:提问者读了一篇文章,原文解释setTi ...

  6. settimeout(fn(),0)

    settimeout(fn(),0) 总所周知,settimeout 函数是用来做延时的,如 settimeout(()=>{console.log('show content')},1000) ...

  7. settimeout( )是全局函数吗_JS函数的执行

    js 在不同时机运行,会有不同的运行结果,本文将分别举例分析 案例1 只有在调用fn()时函数才开始执行 函数可以调用全局变量a 案例2 再次声明,在调用fn()是才开始执行函数,所以执行完 a=2后 ...

  8. 你所不知道的setTimeout

    JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务.初始接触它的人都觉得好简单 ...

  9. 探索setTimeout

    其实说起JavaScript中的定时器(Timer)中的 setTimeout() 方法,从事开发的同学想必都不会陌生,觉得这些东西很简单很基础.但是有时候恰恰是基础简单的东西,才越容易被忽略.先看一 ...

最新文章

  1. 千万别只顾着代码不上厕所
  2. C#请求Post接口
  3. Transformer在图像复原领域的降维打击,ETH提出SwinIR:各项任务全面领先
  4. 轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
  5. 《算法竞赛入门经典》 例题 4-4 信息编码 (Message Decoding,ACM,ICPC World Finals 1991,UVa 213)
  6. linux系统编程:自己动手写一个who命令
  7. 在SAP除了使用Cordova生产移动应用外,还有这种方式
  8. 论文浅尝 | 基于图匹配神经网络的跨语言知识图对齐 (ACL 2019)
  9. TensorFlow学习笔记03:单变量线性回归
  10. python新线程打开cmd_Python – 函数无法在新线程中运行
  11. html和css的重难点知识
  12. PostgreSQL【表】
  13. CSL:圆形平滑标签的任意方向目标检测
  14. 运行 CTS 测试命令
  15. 分贝测试软件哪个好 家庭影院,家庭影院隔音怎么做效果最好 这7个解决方案你一定要知道...
  16. 李丽云为什么选择肖志军?
  17. Python机器学习入门笔记(1)—— Scikit-learn与特征工程
  18. Understanding Maximum-a-Posteriori (MAP) Estimation
  19. 【网红流水线车间】“制造”李佳琦们的神秘组织,到底是怎么让网红火起来的?...
  20. 数据分析之pandas学习笔记(六)(层次化索引、重塑、轴向旋转、行列变换、合并表数据)

热门文章

  1. javascript-高级用法
  2. getMeasuredWidth和getWidth的区别
  3. Linux 性能监控 : CPU 、Memory 、 IO 、Network
  4. 深入学习http协议(转)
  5. Exchange Powershell查看用户最后登陆邮箱时间
  6. [Swift]LeetCode1146. 快照数组 | Snapshot Array
  7. 应用安全-操作系统安全-漏洞修复整理
  8. Linux移植之内核启动过程引导阶段分析
  9. 20165310_获奖感想与Java阶段性学习总结
  10. python作业高级FTP(第八周)