js函數節流和閉包

今天解決了一個小程序中函數節流的問題 小記如下。
節流 lodash中是throttle()那個函數,改天能夠去研究下源碼
下面是我本身實現的節流函數小程序

getClickTagFunc(){
     //定義一個標識,用來判斷是否繞過下面匿名函數的判斷
     let canRun = true
     //這個函數在onLoad()的時候就被調用
     //會返回一個匿名函數,這個匿名函數會被存在data裏
     return function(id, isLiked){
        //匿名函數會在父做用域中去尋找canRun 若是是false 則再也不執行下面的代碼 return 掉
       if(!canRun) return false
       //繞過判斷以後 當即把父做用域內的值設爲false 這個是關鍵 因爲canRun是false 因此200毫秒以內這個函數再被調用 就會直接被 return 掉
       canRun=false
        setTimeout(() => {
         
         dosomething......
         //作完想作的事情以後 把canRun設置爲true 這樣dosomething纔會再次被調到。一般dosomething這裏會是一個回調函數
         canRun=true
      
    }, 200)      
   }
},

節流簡單點說就是稀釋函數被調用的頻率
而後還有一個就是閉包,以前一直不明白閉包要用在什麼地方,今天算是初步弄明白了。可讓局部變量不被重置,一般來講 這是須要一個全局變量的。可是經過一個閉包也能完成。閉包

1.定義一個函數
2.函數裏面定義一個變量
3.返回一個匿名函數
4.匿名函數裏面操做這個變量
5.使用的時候調用返回的匿名函數,能夠用一個變量來接受函數

一個簡單的計數器 代碼以下code

function count(){
    let x = 0 
    return function(){
        console.log(x++) 
    }
}

let run = count()

setInterval(() => {
  run()
}, 200);
相關文章
相關標籤/搜索