Function throttle

  • Creates a throttled function that only invokes func at most once per every wait milliseconds (or once per browser frame). The throttled function comes with a cancel method to cancel delayed func invocations and a flush method to immediately invoke them. Provide options to indicate whether func should be invoked on the leading and/or trailing edge of the wait timeout. The func is invoked with the last arguments provided to the throttled function. Subsequent calls to the throttled function return the result of the last func invocation.

    Note: If leading and trailing options are true, func is invoked on the trailing edge of the timeout only if the throttled function is invoked more than once during the wait timeout.

    If wait is 0 and leading is false, func invocation is deferred until the next tick, similar to setTimeout with a timeout of 0.

    If wait is omitted in an environment with requestAnimationFrame, func invocation will be deferred until the next frame is drawn (typically about 16ms).

    See David Corbacho's article for details over the differences between throttle and debounce.


    • func: ((...args) => any)

      The function to throttle.

        • (...args): any
        • Parameters

          • Rest ...args: any[]

          Returns any

    • wait: number = 0

      The number of milliseconds to delay; if omitted, requestAnimationFrame is used (if available).

    • options: {
          leading: boolean;
          trailing: boolean;
      } = ...

      The options object.

      • leading: boolean
      • trailing: boolean

    Returns DebouncedFunction<((...args) => any)>




    // Avoid excessively updating the position while scrolling.
    jQuery(window).on('scroll', throttle(updatePosition, 100))

    // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
    const throttled = throttle(renewToken, 300000, { 'trailing': false })
    jQuery(element).on('click', throttled)

    // Cancel the trailing throttled invocation.
    jQuery(window).on('popstate', throttled.cancel)