今天解決了一個小程序中函數節流的問題 小記如下。
節流 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);