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】

最新文章

  1. yii打印sql
  2. npm ERR!无法安装任何包的解决办法
  3. Absolute sort
  4. win7使用右键导致死机、假死、explorer无法响应的解决方法
  5. Data Structure(3)——软考阶段学习小结
  6. 苹果App Store开发者帐户从申请,验证,到发布应用(2)
  7. python之路 序列化 pickle,json
  8. DeepLearning.ai学习笔记(四)卷积神经网络 -- week3 目标检测
  9. 20165206学习基础和C语言基础调查
  10. 豹哥嵌入式讲堂:ARM知识概要杂辑(4)- Cortex-M处理器性能指标
  11. NLP+语义分析(四)︱中文语义分析研究现状(CIPS2016、角色标注、篇章分析)
  12. 历经15个小时,终于评出这8本最受欢迎的SQL书籍
  13. 【死磕 Spring】----- IOC 之解析 bean 标签:开启解析进程
  14. [Treap][学习笔记]
  15. tyflow birth节点
  16. MacOS下保护浏览器主页和默认搜索
  17. 《Maven实战》文字版[PDF]
  18. centOS基本操作和命令(更新)
  19. IIS 禁止访问:在 Web 服务器上已拒绝目录列表
  20. 从源码层面解析SpringIOC容器

热门文章

  1. tensorflow 学习教程
  2. MapReduce计数程序(自主复习)
  3. Vue基础第二章
  4. open函数的打开标志所在文件
  5. python实现学生信息系统
  6. Spring mvc项目的web.xml以及注释
  7. Mybatis 动态sql(转载)
  8. 微信小程序模板消息后端代码
  9. .net reactor 加密混淆使用办法
  10. vue父组件异步获取动态数据传递给子组件获取不到值