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

代码不复杂,逻辑很简单,就是函数节流,我直接放代码了。

https://img2.mukewang.com/5c1c5a280001e36905370894.jpg

理论上当我不断改变浏览器窗口大小的时候(就是说间隔肯定小于1s的),doSomthing 从第二次开始是不会被执行的。因为我在不断的执行 cleraTimeout,实际运行结果是 console.log('第'+count+'次执行) 确实没有被打印出来,但是当我停止改变浏览器窗口的时候,发现打印出来的 count 并不是 1,而且是一个很大的数。

这说明,在这段代码里:

timer = setTimeout(function () {

        last = now

        console.log('第'+count+'次执行')

        fn.apply(context, args)

      }, threshhold)`

setTimeout() 里的匿名函数没有被执行,但是匿名函数里的 fn.apply() 却被执行了,求大神告知原理何在啊?还是我这段代码本身有问题?



江户川乱折腾
浏览 702回答 1
1回答

幕布斯7119047

除了setTimeout里的之外,在if (last && now < last + threshhold) { \*...*\ }else {&nbsp; &nbsp; &nbsp;last = now&nbsp; &nbsp; &nbsp;fn.apply(context, args) //这里还有一个fn.apply()}在改变浏览器大小时,else里的这个fn.apply会每隔threshhold毫秒执行一次所以setTimeout确实只执行了一次,其余的次数是else里的fn.apply执行的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript