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

js 入坑题目:setTimeout()函数执行完结果却是五个6的原因是?

js 入坑题目:setTimeout()函数执行完结果却是五个6的原因是?

富国沪深 2018-11-09 14:10:35
setTimeout()函数执行完结果却是 五个6 的原因是? for (var i = 1; i <= 5; i++) {        setTimeout(function timer() {            console.log(i);        }, i * 1000);    }// 其实我们想得到的结果是1,2,3,4,5,结果却是五个6虽然用js 闭包解决了问题,得到想要的1,2,3,4,5,但还是不明白上述的代码为什么出现五个6? for (var i = 1; i <= 5; i++) {        (function(j) {            setTimeout(function timer() {                console.log(j);            }, j * 1000);        })(i);        //通过一个立即执行函数,为每次循环创建一个单独的作用域
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

首先需要明白的一点JS的任务机制是队列机制。

所以没走一次for循坏只是把setTimeout这个任务放到队列后面,即setTimeout里面执行的代码只会在执行完for循坏才会执行,所以那个时候i的值就是不满足for循坏的值,才会去执行setTimeout的代码。

个人看法,有什么说的不对的欢迎指出


查看完整回答
反对 回复 2018-12-06
  • 1 回答
  • 0 关注
  • 565 浏览
慕课专栏
更多

添加回答

举报

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