91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

函數防抖和節流的區別以及使用方法

發布時間:2020-06-17 13:43:38 來源:PHP中文網 閱讀:637 作者:鴿子 欄目:web開發

前言

函數防抖和節流,這個知識點面試中被問的概率比較高。

防抖

非立即執行版防抖可以理解為n時間后執行一次函數。立即執行版防抖是立即執行一次函數。

防抖的實現

/**
 * @desc 函數防抖
 * @param {Function} func 函數
 * @param {Number} wait 延遲執行毫秒數
 * @param {Boolean} immediate true 表示立即執行,false 表示非立即執行
 */
function debounce(func, wait, immediate) {
  let timeout
  return function () {
    let context = this
    let args = arguments
    if (timeout) {
      clearTimeout(timeout)
    }
    if (immediate) {
      let callNow = !timeout
      timeout = setTimeout(() => {
        timeout = null
      }, wait)
      if (callNow) {
        typeof func === 'function' && func.apply(context, args)
      }
    } else {
      timeout = setTimeout(() => {
        typeof func === 'function' && func.apply(context, args)
      }, wait)
    }
  }
}

節流

節流可以理解為每隔n時間執行一次函數。

節流的實現

/**
 * @desc 函數節流
 * @param {Function} func 函數
 * @param {Number} wait 延遲執行毫秒數
 * @param {Boolean} type true 表示時間戳版,false 表示定時器版
 */
function throttle(func, wait, type) {
  let previous
  let timeout
  if (type) {
    previous = 0
  } else {
    timeout
  }
  return function () {
    let context = this
    let args = arguments
    if (type) {
      let now = Date.now()
      if (now - previous > wait) {
        typeof func === 'function' && func.apply(context, args)
        previous = now
      }
    } else {
      if (!timeout) {
        timeout = setTimeout(() => {
          timeout = null
          typeof func === 'function' && func.apply(context, args)
        }, wait)
      }
    }
  }
}

防抖和節流的區別

用文本框輸入文字來演示的話,假如時間都設置為1s,用戶不斷輸入文字,如果是非立即執行防抖的話是停止輸入1s后函數執行,只執行一次,如果是立即執行的防抖的話是立即函數執行,只執行一次。節流則是在用戶輸入期間,每隔一秒執行一次函數,可能會執行多次。

防抖和節流調用的區別

下面代碼防抖函數和節流函數都調用了10000000次,但是防抖函數只會執行一次,可是節流函數就很多次了。

let debounceCallback = debounce(function () {
  console.log('debounceCallback')
}, 1000, false)

for (let i = 0; i < 10000000; i++) {
  debounceCallback()
}

let throttleCallback = throttle(function () {
  console.log('throttleCallback')
}, 1000, false)

for (let i = 0; i < 10000000; i++) {
  throttleCallback()
}

以上就是輕松理解函數防抖和節流的使用的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥江县| 田林县| 开阳县| 淮北市| 喀什市| 仙居县| 土默特右旗| 安福县| 南康市| 固始县| 分宜县| 鄂托克前旗| 盖州市| 定襄县| 诏安县| 开阳县| 陈巴尔虎旗| 渝北区| 石泉县| 禹城市| 九江市| 平顶山市| 毕节市| 武威市| 黔东| 柳江县| 宜章县| 安福县| 图木舒克市| 清苑县| 德江县| 南昌市| 宝鸡市| 靖西县| 绥滨县| 建水县| 卢湾区| 乌什县| 娱乐| 辽源市| 大埔县|