【发布时间】:2020-01-22 00:00:01
【问题描述】:
我遇到过几次自定义的去抖函数,本教程的大部分内容都是这样编写去抖函数的
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
我对声明上下文和参数的含义感到困惑,并在匿名返回函数中使用 apply。声明这两个变量,后面再用apply,把这两个传入debounce中的待执行函数有什么意义?
对我来说,我只能看到它允许我以这种方式传递参数:
function myFunc(name) {
console.log('hello',name)
}
debounce(myFunc, 100)('Josh');
但是和直接传给myFunc不一样吗,这样写:
debounce(myFunc('Josh'), 100);
为什么我们需要在这里使用apply?
【问题讨论】:
-
您可以轻松试用您的版本:它不起作用。
-
请记住,
debounce应该用作const f = debounce(myFunc, 100); f('John'); f('Luke'); f('Jane'); …,然后是对f的更多调用。这根本不适合你的风格(即使你做了f = debounce(() => { myFunc('Josh') }, 100))。
标签: javascript debounce