假设我有以下事件处理程序:

var mousewheel = function (e) { /* blah */ };

但是,我想对它进行反跳。所以我这样做,按预期工作:
var mousewheelDebounced = _.debounce(mousewheel, 500);
$(document).on("mousewheel", function (e) {
  e.preventDefault();
  mousewheelDebounced(e);
}

但这不能按预期工作:
$(document).on("mousewheel", function (e) {
  e.preventDefault();
  _.debounce(mousewheel, 500)(e);
}

我更喜欢第二种形式的紧凑性。但是不会发生反跳。

我假定没有对mousewheelDebounced的引用,因此每次都调用底层处理程序。那是原因吗?如果可能,如何清除此代码?

您会看到 fiddle here

最佳答案

在每个mousewheel事件(此事件经常发生)上,您将创建一个新版本的debounce函数。此函数没有历史记录,并且不知道在先前的事件中创建了另一个函数。这样就可以运行了。这就是为什么您应该使用第一个版本。

10-06 15:18