代码不复杂,逻辑很简单,就是函数节流,我直接放代码了。理论上当我不断改变浏览器窗口大小的时候(就是说间隔肯定小于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
执行的
添加回答
举报
0/150
提交
取消