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

关于函数节流,定时器里的fn.applay()感觉好诡异?

关于函数节流,定时器里的fn.applay()感觉好诡异?

江户川乱折腾 2018-11-21 18:17:15
代码不复杂,逻辑很简单,就是函数节流,我直接放代码了。理论上当我不断改变浏览器窗口大小的时候(就是说间隔肯定小于1s的),doSomthing 从第二次开始是不会被执行的。因为我在不断的执行 cleraTimeout,实际运行结果是 console.log('第'+count+'次执行) 确实没有被打印出来,但是当我停止改变浏览器窗口的时候,发现打印出来的 count 并不是 1,而且是一个很大的数。这说明,在这段代码里:timer = setTimeout(function () {        last = now        console.log('第'+count+'次执行')        fn.apply(context, args)      }, threshhold)`setTimeout() 里的匿名函数没有被执行,但是匿名函数里的 fn.apply() 却被执行了,求大神告知原理何在啊?还是我这段代码本身有问题?
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

除了setTimeout里的之外,在

if (last && now < last + threshhold) { \*...*\ }

else {

     last = now

     fn.apply(context, args) //这里还有一个fn.apply()

}

在改变浏览器大小时,else里的这个fn.apply会每隔threshhold毫秒执行一次

所以setTimeout确实只执行了一次,其余的次数是else里的fn.apply执行的


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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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