问一个关于闭包中的setTimeout的问题

function debounce(fn, delta, context) {
  var timeoutID = null;
  
  return function() {
    if(timeoutID) {
      clearTimeout(timeoutID);
      console.log(timeoutID);
    }
   
    
    var args = arguments;
    
    timeoutID = setTimeout(function() {
      fn.apply(context, args);
    }, delta);
    
  }
}

function D() {
  document.body.innerHTML += 'D<br>'
}
window.addEventListener('click', debounce(D, 1000));

clipboard.png

阅读 3.1k
3 个回答

你看到的那个数字是变量 timeoutID 的值,它是由 setTimeout 函数返回的,它的值是一个数字。它代表一个定时器的 id ,每次点击后这个值会变化。例如在 Chrome 浏览器中,第一次点击后它的值是 1, 第二次点击后是 2,以此类推。

它只代表定时器的 id,不代表定时器是否已经已经完成或者被取消。

你又没清空timeoutID这个变量 当然能看到了

timeoutID = setTimeout(function() {
  fn.apply(context, args);
  timeoutID = null;
}, delta);

这样子试一下,

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