带时间javascript的回调函数

时间:2018-11-15 19:57:17

标签: javascript

“需要帮助!”
测试4
编写一个函数f4,该函数接受一个回调函数cb作为参数并返回一个函数 不管它多久被调用,它最多每300毫秒调用一次cb。
示例:
●const f = f4(cb); f();
---○cb被立即调用一次。
-----说明:
-------■f4是第一次调用,因此cb尚未被调用         300毫秒,因此直接调用。

●const f = f4(cb); F(); [100毫秒后] f(); [200毫秒后] f();
---○cb直接调用一次,然后在300毫秒后调用一次。
-----说明:
------■f()的第一次调用直接调用cb
------■f()的第二次调用发生在300毫秒之前         因为cb的最后一次调用,所以它被忽略并且cb没有被调用。
------■f()的第三次调用发生在最后一次cb之后的300毫秒         已经被调用,所以cb又被调用了。

1 个答案:

答案 0 :(得分:0)

您可以使用David Walsh编写的此反跳功能。

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);
    };
};

要让一个函数每300毫秒仅调用一次,您可以执行以下操作:

var fn = debounce(function(){
  //can only be called once every 300 ms
}, 300);

另请参见:

https://davidwalsh.name/essential-javascript-functions