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

关于setTimeout执行时间问题

关于setTimeout执行时间问题

慕妹3242003 2018-11-13 09:47:13
AA2BC(采用闭包)问题:1. A与A2中的时间设置中的i*3000,i值为多少?(1?),为什么时间依旧是3000,没有和i值一齐计算?包括采用闭包后(C),依旧是每隔3000ms弹出。2. A与B的区别?i*3000和3000,console弹出的区别,这个区别在C闭包上也有体现。为什么会造成这样区别?之前看到JS的队列执行结构,知道setTimeout这类函数是须等其他代码执行完毕后才开始执行,且存在多个setTimeout的话,按照时间设置长短,分配优先级(设置时间短的在前)。这里实在不知道为什么会有这样的区别,对它还是摸不透- -for (var i=1;i<6;i++) {       !function (num) {          setTimeout( function timer() {            console.log(num);          }, num*3000 );      }(i)}依旧是每隔3秒弹出一个console,去掉num*则一齐弹出。相乘运算难道没执行?
查看完整描述

1 回答

?
慕斯王

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

  1. setTimeout每隔3000ms弹出一个的话,时间不应该是3000,6000,9000,12000吗,你是不是跟setInterval搞混了。
    然后再说一点setTimeout(fn,time),这是个函数的执行,setTimeout的创建与主js是同步的(这个时候time的值就已经确定了),异步的是其中的fn的执行(执行的时候再去找内部的i或者num才会收闭包等的影响)。

  2. 站内搜一下event loop js应该有很多重复的问题和解释。


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号