前置知识:
闭包:
由父函数返回的子函数,会保留其父函数的语境
例子:
function closure() {
let count = 0;
return function() {
return count++;
}
}
const increment = closure();
console.log(increment()); // 0
console.log(increment()); // 1
console.log(increment()); // 2
Function.prototype.apply:
调用一个函数,但是改变它this指针的指向
例子:
const obj1 = {
a: 1,
thisA() {
return this.a;
}
};
const obj2 = {
a: 2,
};
console.log(obj1.thisA()); // 1
console.log(obj1.thisA.apply(obj2)); // 2
代码:
防抖:
- 原理:闭包记录一个timer,每次要执行防抖函数时,假如上一个timer还没结束就clear掉重新定一个执行原函数的timer
- 效果:用户快速反复点击,但只有最后一次点击在delay后生效
- 应用场景:联想搜索输入框,敲很多字停下来后才调用后台搜索,减少不必要的搜索频率