宣布细分

时间:2014-09-25 09:27:54

标签: javascript jquery debouncing

我在网上找到了以下代码,并且我试图实现它以使用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);

1 个答案:

答案 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”的人可以将它存储为任何变量。