@[TOC](防抖函數的理解(新手向,微信小程序適用))
這幾天看了很多關於防抖函數的博客,我是在微信小程序中使用,在此總結一下關於防抖函數的知識。
## 為什么需要防抖函數?
防抖函數適用的是【**有大量重復操作**】的場景,比如列表渲染之后對每一項進行操作。
**函數代碼:**
```
var timer;
debounce: function (func, wait) {
return () => {
clearTimeout(timer);
timer = setTimeout(func, wait);
};
},
```
**參數**:
func:需要防抖的函數;
wait:number類型,setTimeout的時間參數;
**代碼分析**:
命名一個叫做debounce的函數,參數有兩個(func,wait),return一個函數,內容為清除計時器,然后設置計時器,計時器的意思是:在wait時間后執行func。
清除計時器是整個函數的核心,因為防抖需要不停地清除計時器,最后在計時器結束后觸發func來達到效果。
## 防抖函數的調用方法
example:
```
this.debounce(this.函數名,3000)()
```
**在使用這個函數的時候我遇到了一些問題:**
因為微信小程序中很多地方都需要使用this.setData,如果對於this指向的理解不深入的話,很容易出現以下情況:
1:this==undefined;
2:Error:data is not defined;
等等一些列關於this的問題。
**解決方法**:
```
this.debounce(this.函數名.bind(this),3000)()
```
使用bind(this)把this指向傳到函數內部就解決了。
具體關於bind的內容可以參考[MDN/bind()](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)
