博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
setTimeout(function(){}, 0);
阅读量:5950 次
发布时间:2019-06-19

本文共 1109 字,大约阅读时间需要 3 分钟。

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

你可能感兴趣的文章
socat: Linux / UNIX TCP Port Forwarder
查看>>
HDOJ 2056
查看>>
2012年最佳免费网站和移动应用 PSD 界面素材揭晓
查看>>
github (远端建立分支....配置见github 官网配置)
查看>>
gjrand 4.0 发布,C语言的伪随机数生成器
查看>>
实战DeviceIoControl 之七:在Windows 9X中读写磁盘扇区
查看>>
简明Linux命令行笔记:locate
查看>>
EF Code First 学习笔记:约定配置
查看>>
自动完成文本框AutoCompleteTextView
查看>>
【Android】【录音】Android录音--AudioRecord、MediaRecorder
查看>>
微软开源C++ REST SDK——Casablanca
查看>>
技术能力与真不是几年经验成正比的
查看>>
文件IO open 与 标准 IO fopen 的对应
查看>>
“云经济”与创新
查看>>
cell smart restore from backup等待事件
查看>>
php中输入这个网站的网址跳转到你定义的页面代码
查看>>
关于左移右移的操作 学习
查看>>
利用泛型写一个简单的链表
查看>>
Android 自动判断是电话,网址,EMAIL方法之Linkify
查看>>
Java Quartz 自动调度
查看>>