防抖【JS面试题】

作者: 小野WEB分类: 计算机技术 发布时间: 2021-10-09 16:31:11 浏览:11185 次

防抖【JS面试题】

小马der驾Qqq:
老师,恕我太菜,每次输入的时候不会初始化timer为null吗?

【回复】回复 @CEREBRUM3 :懂了,悟了,其实事件绑定的是debounce返回的方法,debounce只有绑定的时候执行了一次,所以debounce只是执行了一次,只有第一次的时候timer初始化为了null,因为是一个闭包所以timer一直保存在内存中,所以第执行的是匿名函数,而匿名函数中timer是一直保存在内存中的
【回复】看清楚被input监听的是dobounce函数的调用。不是dobounce而是dobounce()。
【回复】回复 @前端小野森森-2 :输入的时候不是会从头走一次debounce吗,那timer为什么不会重置,求讲解 [打call]
YonChun:
菜鸟很好奇,input绑定debounce函数,每次按下都会执行,岂不是 timer=null 每次都会初始化timer吗

【回复】debounce并没有input监听的,而是debounce()才被input监听。看清楚debounce后面有括号,即调用。所以input监听的是debounce的返回值。然后匿名函数通过闭包存储timer,所以timer不会null。
【回复】绑定上的函数是那个匿名函数,timer被闭包了,成为那个匿名函数的一个状态
【回复】函数释放完了,timer才会销毁 但是函数释放是由定时器控制的,每次有新的输入,定时器又被清空然后重新开始定时
超级小57:
你这防抖是我见过最简单,最实用的防抖👍

小雨度:
没有说到关键点在哪里 闭包内部函数要使用外部函数的变量 同事内部函数还要在外部环境被调用才行

贩桶:
arguments不是个数组吗,怎么打印出来就只有一个事件对象

【回复】箭头函数中没有arguments对象
【回复】还有准确来说,arguments是一个类数组对象,因为它只有数组的索引和length,并没有数组的方法[doge]
【回复】apply会将arguments数组作为多个参数传给fn
大龄混子:
老师好,timer初始化为0也可以吧,为啥要初始化为null呢?

视频教程 编程 野生技术协会 WEB 前端 JAVASCRIPT VUE WEB前端 打卡挑战 让学习变得更简单

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!