假设我有以下事件处理程序:
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
函数。此函数没有历史记录,并且不知道在先前的事件中创建了另一个函数。这样就可以运行了。这就是为什么您应该使用第一个版本。