防抖函數的應用


@[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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM