关于的debounce原理

function debounce(fn, delay) {

var timer

return function () {


var context = this
var args = arguments


clearTimeout(timer)



timer = setTimeout(function () {
  fn.apply(context, args)
}, delay)

}
}

代码如上 不明白这里为什么一定要 return function 加一层是干什么用的

求解

阅读 2k
3 个回答

1.debounce是一个高阶函数,接受一个函数作为参数,返回一个经过防抖包装的函数。所以返回的一定是一个函数。

2.至于为什么不直接返回原函数,是因为这个防抖处理需要在原函数执行前进行抖动判断,而原函数的内容时无法修改的,因此需要返回一个自己定义的函数以执行判断逻辑

var s=debounce(fn,args);
.......
s()

生成函数后在适当的时候调用

闭包啊。不然timer每次都是新的, 无法记住上一下的定时器了啊。

也就是说你的clearTimeout(timer) 等价于 clearTimeout(undefined)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题