为了账号安全,请及时绑定邮箱和手机立即绑定

闭包中,seTimeout中alert(i),为什么会乱序?

闭包中,seTimeout中alert(i),为什么会乱序?

呼啦一阵风 2019-03-13 17:13:50
一个很经典的闭包题for (var i = 1; i <= 5; i++) {    (function a(i) {        setTimeout(function() {            alert(i);        }, 1000);    })(i);}按理说,应该弹出1 2 3 4 5 ,但是实际弹出的却是乱序的。换成console.log(i)就是1 2 3 4 5。这是为什么呢?
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

因为alert会阻塞进程
第一个弹出的必定是1,弹出的时候如果你不点击确定,那么就回一直阻塞着,而这时所有的后续代码和回调函数都不会在执行。

同步代码执行完成后,后生成5个定时器,在弹出1等待你点击确定时,后面的所有的定时器都已经准备好了,所以是乱序的

console函数不会阻塞,所以按照顺序执行的


查看完整回答
反对 回复 2019-03-27
  • 1 回答
  • 0 关注
  • 547 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信