代码之家  ›  专栏  ›  技术社区  ›  rustyshackleford

Mout.js节流函数中的ESLint错误

  •  0
  • rustyshackleford  · 技术社区  · 6 年前

    代码如下:

    /**
     * @version 0.1.0 (2012/11/27)
     */
    export default function throttle(fn, delay) {
        let context;
        let timeout;
        let result;
        let args;
        let cur;
        let diff;
        let prev = 0;
        function delayed() {
            prev = Date.now();
            timeout = null;
            result = fn.apply(context, args);
        }
        function throttled() {
            context = this;
            args = arguments;
            cur = Date.now();
            diff = delay - (cur - prev);
            if (diff <= 0) {
                clearTimeout(timeout);
                prev = cur;
                result = fn.apply(context, args);
            } else if (!timeout) {
                timeout = setTimeout(delayed, diff);
            }
            return result;
        }
        return throttled;
    }
    

    ESLint:使用rest参数而不是'arguments'(首选rest参数)

    args = arguments; 线路。我试着看了看医生 rest-params

    1 回复  |  直到 6 年前
        1
  •  1
  •   Bryan Downing    6 年前

    arguments对象不是正确的数组。ESLint规则鼓励您不要使用它。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

    正如Patrick在评论中所说,解决方案是使用如下rest参数:

    function throttled(...rest) {
        context = this;
        args = rest;
        cur = Date.now();
        diff = delay - (cur - prev);
        if (diff <= 0) {
            clearTimeout(timeout);
            prev = cur;
            result = fn.apply(context, args);
        } else if (!timeout) {
            timeout = setTimeout(delayed, diff);
        }
        return result;
    }
    

    有关更多信息,请参见文档中的rest参数: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters