setTimeout(function(){}, 0);
2024-08-30 12:12:24
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i);
}, 0);
console.log(i);
}
结果是:
0 1 2 3 3 3
分析:
1、在实践中,setTimeout 会在其完成当前任何延迟事件的事件处理器的执行,以及完成文档当前状态更新后,告诉浏览器去启用 setTimeout 内注册的函数。
2、setTimeout是异步的。正确的理解setTimeout的方式(注册事件):
有两个参数,第一个参数是函数,第二参数是时间值。
调用setTimeout时,把函数参数,放到事件队列中。等主程序运行完,再调用。
原题等价于:
var i = 0;
setTimeout(function() {
console.log(i);
}, 0);
console.log(i);
i++;
setTimeout(function() {
console.log(i);
}, 0);
console.log(i);
i++;
setTimeout(function() {
console.log(i);
}, 0);
console.log(i);
i++;
因为setTimeout是注册事件。根据前面的讨论,可以都放在后面。
原题又等价于如下的写法:
var i = 0;
console.log(i);
i++;
console.log(i);
i++;
console.log(i);
i++;
setTimeout(function() {
console.log(i);
}, 0);
setTimeout(function() {
console.log(i);
}, 0);
setTimeout(function() {
console.log(i);
}, 0);
参考资料:【http://www.qdfuns.com/notes/17398/e8a1ce8f863e8b5abb530069b388a158/page/3.html#tagsbar】
最新文章
- yii打印sql
- npm ERR!无法安装任何包的解决办法
- Absolute sort
- win7使用右键导致死机、假死、explorer无法响应的解决方法
- Data Structure(3)——软考阶段学习小结
- 苹果App Store开发者帐户从申请,验证,到发布应用(2)
- python之路 序列化 pickle,json
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week3 目标检测
- 20165206学习基础和C语言基础调查
- 豹哥嵌入式讲堂:ARM知识概要杂辑(4)- Cortex-M处理器性能指标
- NLP+语义分析(四)︱中文语义分析研究现状(CIPS2016、角色标注、篇章分析)
- 历经15个小时,终于评出这8本最受欢迎的SQL书籍
- 【死磕 Spring】----- IOC 之解析 bean 标签:开启解析进程
- [Treap][学习笔记]
- tyflow birth节点
- MacOS下保护浏览器主页和默认搜索
- 《Maven实战》文字版[PDF]
- centOS基本操作和命令(更新)
- IIS 禁止访问:在 Web 服务器上已拒绝目录列表
- 从源码层面解析SpringIOC容器