我使用lodash debounce来防止用户在很短的时间内按键盘两次。以下代码不起作用:
window.addEventListener('keydown', _.debounce((e) => this.keyDown(e), 300), false);
但如果我改为:
,它会奏效window.addEventListener('keydown', this.debounceKeyFunc.bind(this), false);
debounceKeyFunc = _.debounce((e) => this.keyDown(e), 300);
debounceKeyFunc
是当前类实例的方法this.debounceKeyFunc
。
我不明白为什么我需要定义一个单独的函数来去除关键事件回调以使其工作。
答案 0 :(得分:1)
- 编辑 - 实际上,我写的是真的但不适用于此。 debounce仅在句柄注册时调用一次并且应该有效。 第一个也适用于我,除了没有定义的面
- 编辑 -
你必须确保debounced函数只创建一次,因为它拥有一个用于去抖动的内部状态,记住它最后一次被调用。
在你的第一个例子中,debounced函数是在每个事件上创建的,这意味着每次都会重新开始去抖动,这意味着没有什么可以去抖动,因为每个事件都有自己的去抖动。
我希望能够解释它,否则只需要问。