我在网上找到了以下代码,并且我试图实现它以使用resize事件监听器,并且正在努力理解它的工作原理的复杂性。是否有人愿意将其分解为只有3个月有JS / Jquery经验的人会理解?关于我正在努力解决的问题(其中大部分内容,但我将定义真正令人困惑的部分)的一些指示是"参数"或变量" args"它的值是否已分配给定义?如何通过"立即"进入去抖功能。等等。
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);
};
};
var debounceHeightSet = debounce(function() {
numHeightset();
}, 250);
答案 0 :(得分:0)
Arguments是一个Javascript只在请求时才生成的数组,所以你不定义它。 由于性能问题和安全问题,在javascript中使用参数也不是一个好习惯。
Args在此代码中定义。
var context = this,
args = arguments;
以上语句是使用逗号定义多个变量的方法。因此,对于所有变量,您不需要var关键字。
var callNow = immediate && !timeout;
上面是一张支票,所以“立即”必须是“布尔”。
所以你可以把这个函数称为
var debounceHeightSet = debounce(function() {
numHeightset();
}, 250,true);
由于函数是Javascript中的第一类对象,因此此代码中使用了各种函数。 示例: 1)函数'func'作为函数'debounce'的参数被接收。 2)还有一个函数从“debounce”函数返回。
注意:这里返回的函数是一个匿名函数,因为我们这里不需要名字。一个叫“debounce”的人可以将它存储为任何变量。