1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| export default function throttle(fn, interval = 100) { //fn为要执行的函数,interval为延迟时间
| var _self = fn, //保存需要被延迟执行的函数引用
| timer, //定时器
| firstTime = true; //是否第一次调用
| return function() { //返回一个函数,形成闭包,持久化变量
| var args = arguments, //缓存变量
| _me = this;
| if (firstTime) { //如果是第一次调用,不用延迟执行
| _self.apply(_me, args);
| return firstTime = false;
| }
| if (timer) { //如果定时器还在,说明上一次延迟执行还没有完成
| return false;
| }
| timer = setTimeout(function() { //延迟一段时间执行
| clearTimeout(timer);
| timer = null;
| _self.apply(_me, args);
| }, interval);
| }
| }
|
|