js 防抖函数
```js
/**
*
* @param {Function} fn 需要防抖的函数
* @param {Number} wait 等待时间
* @param {Boolean} immediate 是否立即执行
*/
function debounce(fn, wait, immediate) {
let timeout;
return function() {
let context = this;
let args = arguments;
if (timeout) clearTimeout(timeout);
if (immediate) {
var callNow = !timeout;
timeout = setTimeout(() => {
timeout = null;
}, wait);
if (callNow) fn.apply(context, args);
} else {
timeout = setTimeout(() => {
fn.apply(context, args);
}, wait);
}
};
}
```