今天解决了一个小程序中函数节流的问题 小记以下。
节流 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.使用的时候调用返回的匿名函数,可以用一个变量来接受
一个简单的计数器 代码如下
function count(){
let x = 0
return function(){
console.log(x++)
}
}
let run = count()
setInterval(() => {
run()
}, 200);