【发布时间】:2021-03-10 02:52:24
【问题描述】:
我有去抖功能
function debounce(func, wait, immediate) {
// 'private' variable for instance
// The returned function will be able to reference this due to closure.
// Each call to the returned function will share this common timer.
var timeout;
// Calling debounce returns a new anonymous function
return function() {
// reference the context and args for the setTimeout function
var context = this,
args = arguments;
// Should the function be called now? If immediate is true
// and not already in a timeout then the answer is: Yes
var callNow = immediate && !timeout;
// This is the basic debounce behaviour where you can call this
// function several times, but it will only execute once
// [before or after imposing a delay].
// Each time the returned function is called, the timer starts over.
clearTimeout(timeout);
// Set the new timeout
timeout = setTimeout(function() {
// Inside the timeout function, clear the timeout variable
// which will let the next execution run when in 'immediate' mode
timeout = null;
// Check if the function already ran with the immediate flag
if (!immediate) {
// Call the original function with apply
// apply lets you define the 'this' object as well as the arguments
// (both captured before setTimeout)
func.apply(context, args);
}
}, wait);
// Immediate mode and no wait timer? Execute the function..
if (callNow) func.apply(context, args);
}
}
还有一些功能,例如:
const storageEventCb = () => console.error(1);
// Define the debounced function
var debouncedCb = debounce(storageEventCb, 1500);
debouncedCb(); // run
debouncedCb(); // ignore
debouncedCb(); // ignore
感觉不错,但是当我 lisnener 事件存储时
window.addEventListener('storage', storageEventCb );
我得到了很多调用函数。如何解决?
【问题讨论】:
-
你没有定义
storageEventCb2 -
能否请您提供执行此行的代码
window.addEventListener('storage', debouncedCb); -
我更新了代码,问题在那里
-
嗯,你在做
window.addEventListener('storage', storageEventCb);而不是window.addEventListener('storage', debouncedCb);!
标签: javascript