函数防抖及闭包

函数防抖:当调用动作n秒后才会执行该动作,如果在这n秒内又调用该动作,则重新计算时间,等待n秒后执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function debounce(fn, wait) {
var timer = null;
return function () {
var context = this;
var args = arguments;
//清除计时器,不再执行
if (timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(function () {
fn.apply(context, args);
}, wait)
}
}

闭包:上述函数中,返回一个函数,并且这个函数调用了父函数的变量timer;父函数被调用,timer不会注销,还是存在内存中,闭包还是可以拿到timer的值

1
2
3
4
let fun = debounce(fn, 300)
fun() // timer还能访问
let fun2 = debounce(fn, 300)
fun, fun2这两个方法开辟了两块内存空间,里面的timer最初都是null