最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在面試中手寫(xiě)出javascript節(jié)流和防抖函數(shù)

 更新時(shí)間:2020年10月22日 16:59:30   作者:酷兒q  
這篇文章主要介紹了如何在面試中手寫(xiě)出javascript節(jié)流和防抖函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

面試的時(shí)候我們經(jīng)常會(huì)問(wèn)別人是理解什么是節(jié)流和防抖,嚴(yán)格的可能要求你寫(xiě)出節(jié)流和防抖函數(shù),這里我們拋開(kāi)loadsh工具庫(kù)手寫(xiě)節(jié)流和防抖

1.節(jié)流函數(shù)throttle

// 節(jié)流方案1,每delay的時(shí)間執(zhí)行一次,通過(guò)開(kāi)關(guān)控制
function throttle(fn, delay, ctx) {
  let isAvail = true
  return function () {
    let args = arguments // 開(kāi)關(guān)打開(kāi)時(shí),執(zhí)行任務(wù) 
    if (isAvail) {
      fn.apply(ctx, args)
      isAvail = false // delay時(shí)間之后,任務(wù)開(kāi)關(guān)打開(kāi) 
      setTimeout(function () { isAvail = true }, delay)
    }
  }
}
// 節(jié)流方案2,通過(guò)計(jì)算開(kāi)始和結(jié)束時(shí)間
function throttle(fn,delay){
      // 記錄上一次函數(shù)出發(fā)的時(shí)間
      var lastTime = 0
      return function(){
      // 記錄當(dāng)前函數(shù)觸發(fā)的時(shí)間
      var nowTime = new Date().getTime()
      // 當(dāng)當(dāng)前時(shí)間減去上一次執(zhí)行時(shí)間大于這個(gè)指定間隔時(shí)間才讓他觸發(fā)這個(gè)函數(shù)
      if(nowTime - lastTime > delay){
        // 綁定this指向
        fn.call(this)
        //同步時(shí)間
        lastTime = nowTime
      }
      }
    }

2.防抖debounceTail

2.1)只執(zhí)行首次

// 防抖 且首次執(zhí)行
// 采用原理:第一操作觸發(fā),連續(xù)操作時(shí),最后一次操作打開(kāi)任務(wù)開(kāi)關(guān)(并非執(zhí)行任務(wù)),任務(wù)將在下一次操作時(shí)觸發(fā))
function debounceStart(fn, delay, ctx) {
  let immediate = true 
  let movement = null
  return function() {
    let args = arguments
    
    // 開(kāi)關(guān)打開(kāi)時(shí),執(zhí)行任務(wù)
    if (immediate) {
      fn.apply(ctx, args)
      immediate = false
    }
    // 清空上一次操作
    clearTimeout(movement)
    
    // 任務(wù)開(kāi)關(guān)打開(kāi)
    movement = setTimeout(function() {
      immediate = true
    }, delay)
  }
}

2.2)只執(zhí)行最后一次

// 防抖 尾部執(zhí)行
// 采用原理:連續(xù)操作時(shí),上次設(shè)置的setTimeout被clear掉
function debounceTail(fn, delay, ctx) {
  let movement = null
  return function() {
    let args = arguments
    
    // 清空上一次操作
    clearTimeout(movement)
    
    // delay時(shí)間之后,任務(wù)執(zhí)行
    movement = setTimeout(function() {
      fn.apply(ctx, args)
    }, delay)
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript展開(kāi)運(yùn)算符用法及實(shí)際應(yīng)用詳解

    JavaScript展開(kāi)運(yùn)算符用法及實(shí)際應(yīng)用詳解

    展開(kāi)運(yùn)算符是JavaScript中的語(yǔ)法糖,用三個(gè)點(diǎn)(...)表示,廣泛應(yīng)用于數(shù)組和對(duì)象的操作,本文介紹了其基本用法,如在數(shù)組和對(duì)象中的應(yīng)用,合并數(shù)組或?qū)ο?更新對(duì)象屬性等,還探討了展開(kāi)運(yùn)算符的高級(jí)應(yīng)用,需要的朋友可以參考下
    2024-09-09
  • 一文詳解Javascript內(nèi)存機(jī)制與垃圾回收

    一文詳解Javascript內(nèi)存機(jī)制與垃圾回收

    這篇文章主要給大家詳細(xì)介紹了Javascript的內(nèi)存機(jī)制與垃圾回收,文中又詳細(xì)的代碼示例,對(duì)我們學(xué)習(xí)Javascript有一定的幫助,需要的同學(xué)可以借鑒閱讀
    2023-06-06
  • 小程序外賣訂單界面的示例代碼

    小程序外賣訂單界面的示例代碼

    這篇文章主要介紹了小程序外賣訂單界面的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • el-input限制輸入只允許輸入浮點(diǎn)型的解決思路

    el-input限制輸入只允許輸入浮點(diǎn)型的解決思路

    本文主要是記錄,el-input怎么限制輸入只允許輸入浮點(diǎn)型,注意是輸入的時(shí)候限制只允許輸入浮點(diǎn)型,而不是輸入完提交的時(shí)候再校驗(yàn)提示,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • typescript中聲明合并介紹

    typescript中聲明合并介紹

    這篇文章主要介紹了typescript中聲明合并介紹,類型合并表明編譯器將合并兩個(gè)分開(kāi)的并且名稱相同的聲明,合并之后的聲明擁有兩個(gè)聲明的特點(diǎn),任意數(shù)量的聲明可以被合并,不僅限兩個(gè),更多相關(guān)內(nèi)容需要的朋友可以參考下面文章內(nèi)容
    2022-09-09
  • 小程序animate動(dòng)畫(huà)實(shí)現(xiàn)直播間點(diǎn)贊

    小程序animate動(dòng)畫(huà)實(shí)現(xiàn)直播間點(diǎn)贊

    這篇文章主要為大家詳細(xì)介紹了小程序animate動(dòng)畫(huà)實(shí)現(xiàn)直播間點(diǎn)贊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Bootstrap在線電子商務(wù)網(wǎng)站實(shí)戰(zhàn)項(xiàng)目5

    Bootstrap在線電子商務(wù)網(wǎng)站實(shí)戰(zhàn)項(xiàng)目5

    這篇文章主要為大家分享了Bootstrap在線電子商務(wù)網(wǎng)站實(shí)戰(zhàn)項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 利用Js的console對(duì)象,在控制臺(tái)打印調(diào)式信息測(cè)試Js的實(shí)現(xiàn)

    利用Js的console對(duì)象,在控制臺(tái)打印調(diào)式信息測(cè)試Js的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇利用Js的console對(duì)象,在控制臺(tái)打印調(diào)式信息測(cè)試Js的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • js實(shí)現(xiàn)的仿Photoshop鼠標(biāo)滾輪控制輸入框取值(修正兼容Chrome)

    js實(shí)現(xiàn)的仿Photoshop鼠標(biāo)滾輪控制輸入框取值(修正兼容Chrome)

    一直很想做這個(gè)效果,原理是監(jiān)聽(tīng)鼠標(biāo)滾輪事件;可將此效果繼續(xù)發(fā)散到其他應(yīng)用上,如圖片縮放,頁(yè)面縮放等。
    2010-02-02
  • 微信小程序視圖容器和基本內(nèi)容組件圖文詳解

    微信小程序視圖容器和基本內(nèi)容組件圖文詳解

    小程序提供了豐富的基礎(chǔ)組件給開(kāi)發(fā)者,開(kāi)發(fā)者可以像搭積木一樣,組合各種組件拼合成自己的小程序,下面這篇文章主要給大家介紹了關(guān)于微信小程序視圖容器和基本內(nèi)容組件的相關(guān)資料,需要的朋友可以參考下
    2022-07-07

最新評(píng)論

龙州县| 富平县| 舟曲县| 资兴市| 吉林省| 上饶县| 扎囊县| 广元市| 三亚市| 双流县| 深泽县| 白河县| 安达市| 江城| 富宁县| 武陟县| 林周县| 广饶县| 新巴尔虎左旗| 剑阁县| 涿州市| 嘉善县| 京山县| 台湾省| 鹿邑县| 台湾省| 澎湖县| 肃南| 东乡县| 衡山县| 龙里县| 岳池县| 邵阳县| 木兰县| 获嘉县| 永川市| 康乐县| 蓬莱市| 奉贤区| 界首市| 林甸县|