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);
相关文章
相关标签/搜索