function debounce (fn, delay) {
  var timer = null
  return function () {
    var context = this, args = arguments
    clearTimeout(timer)
    timer = setTimeout(function () {
      fn.apply(context, args)
    }, delay)
  }
}
`</pre>

Example:

<pre>`Elm.addEventListener('click', debounce(function(event){
  ...
}, 250))

可以看出, 传入 debounce 的所有函数共享计时器 timer, 因此如果在 delay 时间内再次调用 debounce(fn), 即上一次 fn 为执行而新的 fn 传入时, 上一次的 fn 的 timer 会清空, 对新传入的 fn 进行计时

其结果即是,

在 delay 时限内复数次调用 debounce 会刷新计时器