Creates a debounced function that delays invoking `func` until after `wait` milliseconds have elapsed since the last time the debounced function was invoked. The debounced 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 debounced function. Subsequent calls to the debounced 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 debounced 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`. See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) for details over the differences between `debounce` and `throttle`.
// Avoid costly calculations while the window size is in flux.
jQuery(window).on('resize', debounce(calculateLayout, 150))
// Invoke `sendMail` when clicked, debouncing subsequent calls.
jQuery(element).on('click', debounce(sendMail, 300, {
'leading': true,
'trailing': false
}))
// Ensure `batchLog` is invoked once after 1 second of debounced calls.
const debounced = debounce(batchLog, 250, { 'maxWait': 1000 })
const source = new EventSource('/stream')
jQuery(source).on('message', debounced)
// Cancel the trailing debounced invocation.
jQuery(window).on('popstate', debounced.cancel)
Name | Type | Attribute | Description |
---|---|---|---|
func | The function to debounce. | ||
wait | The number of milliseconds to delay. | ||
options | The options object. | ||
options.leading | Specify invoking on the leading edge of the timeout. | ||
options.maxWait | The maximum time `func` is allowed to be delayed before it's invoked. | ||
options.trailing | Specify invoking on the trailing edge of the timeout. |
{ "comment": "/**\r\n * Creates a debounced function that delays invoking `func` until after `wait`\r\n * milliseconds have elapsed since the last time the debounced function was\r\n * invoked. The debounced function comes with a `cancel` method to cancel\r\n * delayed `func` invocations and a `flush` method to immediately invoke them.\r\n * Provide `options` to indicate whether `func` should be invoked on the\r\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\r\n * with the last arguments provided to the debounced function. Subsequent\r\n * calls to the debounced function return the result of the last `func`\r\n * invocation.\r\n *\r\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\r\n * invoked on the trailing edge of the timeout only if the debounced function\r\n * is invoked more than once during the `wait` timeout.\r\n *\r\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\r\n * until the next tick, similar to `setTimeout` with a timeout of `0`.\r\n *\r\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\r\n * for details over the differences between `debounce` and `throttle`.\r\n *\r\n * @since 0.1.0\r\n * @category Function\r\n * @param {Function} func The function to debounce.\r\n * @param {number} [wait=0] The number of milliseconds to delay.\r\n * @param {Object} [options={}] The options object.\r\n * @param {boolean} [options.leading=false]\r\n * Specify invoking on the leading edge of the timeout.\r\n * @param {number} [options.maxWait]\r\n * The maximum time `func` is allowed to be delayed before it's invoked.\r\n * @param {boolean} [options.trailing=true]\r\n * Specify invoking on the trailing edge of the timeout.\r\n * @returns {Function} Returns the new debounced function.\r\n * @example\r\n *\r\n * // Avoid costly calculations while the window size is in flux.\r\n * jQuery(window).on('resize', debounce(calculateLayout, 150))\r\n *\r\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\r\n * jQuery(element).on('click', debounce(sendMail, 300, {\r\n * 'leading': true,\r\n * 'trailing': false\r\n * }))\r\n *\r\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\r\n * const debounced = debounce(batchLog, 250, { 'maxWait': 1000 })\r\n * const source = new EventSource('/stream')\r\n * jQuery(source).on('message', debounced)\r\n *\r\n * // Cancel the trailing debounced invocation.\r\n * jQuery(window).on('popstate', debounced.cancel)\r\n */", "meta": { "range": [ 2491, 5823 ], "filename": "debounce.js", "lineno": 55, "path": "C:\\Users\\beaujeup\\projects\\jsdoc-template\\examples\\lodash\\lodash-repo", "code": { "id": "astnode100001085", "name": "debounce", "type": "FunctionDeclaration", "paramnames": [ "func", "wait", "options" ] }, "vars": { "lastArgs": "debounce~lastArgs", "lastThis": "debounce~lastThis", "maxWait": "debounce~maxWait", "result": "debounce~result", "timerId": "debounce~timerId", "lastCallTime": "debounce~lastCallTime", "lastInvokeTime": "debounce~lastInvokeTime", "leading": "debounce~leading", "maxing": "debounce~maxing", "trailing": "debounce~trailing", "wait": "debounce~wait", "invokeFunc": "debounce~invokeFunc", "leadingEdge": "debounce~leadingEdge", "remainingWait": "debounce~remainingWait", "shouldInvoke": "debounce~shouldInvoke", "timerExpired": "debounce~timerExpired", "trailingEdge": "debounce~trailingEdge", "cancel": "debounce~cancel", "flush": "debounce~flush", "debounced": "debounce~debounced", "debounced.cancel": "debounce~debounced.cancel", "debounced.flush": "debounce~debounced.flush" } }, "description": "Creates a debounced function that delays invoking `func` until after `wait`\rmilliseconds have elapsed since the last time the debounced function was\rinvoked. The debounced function comes with a `cancel` method to cancel\rdelayed `func` invocations and a `flush` method to immediately invoke them.\rProvide `options` to indicate whether `func` should be invoked on the\rleading and/or trailing edge of the `wait` timeout. The `func` is invoked\rwith the last arguments provided to the debounced function. Subsequent\rcalls to the debounced function return the result of the last `func`\rinvocation.\r\r**Note:** If `leading` and `trailing` options are `true`, `func` is\rinvoked on the trailing edge of the timeout only if the debounced function\ris invoked more than once during the `wait` timeout.\r\rIf `wait` is `0` and `leading` is `false`, `func` invocation is deferred\runtil the next tick, similar to `setTimeout` with a timeout of `0`.\r\rSee [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\rfor details over the differences between `debounce` and `throttle`.", "since": "0.1.0", "tags": [ { "originalTitle": "category", "title": "category", "text": "Function", "value": "Function" } ], "params": [ { "type": { "names": [ "function" ] }, "description": "The function to debounce.", "name": "func" }, { "type": { "names": [ "number" ] }, "optional": true, "defaultvalue": 0, "description": "The number of milliseconds to delay.", "name": "wait" }, { "type": { "names": [ "Object" ] }, "optional": true, "defaultvalue": "{}", "description": "The options object.", "name": "options" }, { "type": { "names": [ "boolean" ] }, "optional": true, "defaultvalue": false, "description": "Specify invoking on the leading edge of the timeout.", "name": "options.leading" }, { "type": { "names": [ "number" ] }, "optional": true, "description": "The maximum time `func` is allowed to be delayed before it's invoked.", "name": "options.maxWait" }, { "type": { "names": [ "boolean" ] }, "optional": true, "defaultvalue": true, "description": "Specify invoking on the trailing edge of the timeout.", "name": "options.trailing" } ], "returns": [ { "type": { "names": [ "function" ] }, "description": "Returns the new debounced function." } ], "examples": [ "// Avoid costly calculations while the window size is in flux.\rjQuery(window).on('resize', debounce(calculateLayout, 150))\r\r// Invoke `sendMail` when clicked, debouncing subsequent calls.\rjQuery(element).on('click', debounce(sendMail, 300, {\r 'leading': true,\r 'trailing': false\r}))\r\r// Ensure `batchLog` is invoked once after 1 second of debounced calls.\rconst debounced = debounce(batchLog, 250, { 'maxWait': 1000 })\rconst source = new EventSource('/stream')\rjQuery(source).on('message', debounced)\r\r// Cancel the trailing debounced invocation.\rjQuery(window).on('popstate', debounced.cancel)" ], "name": "debounce", "longname": "debounce", "kind": "function", "scope": "global", "___id": "T000002R000114", "___s": true, "filepath": "debounce.js" }