闭包就是能够读取其他函数内部变量的函数
- 函数防抖(一般用于input的onchange事件,百度搜索框有用到),应用场景比如当前用户多少秒不对当前界面进行操作,就自动退出界面。
function antiShake(fn, delay){ //fn为在触发事件时要执行的函数, delay是延时多少触发
let timer = null;
return function () {
if (timer) {
//如果在delay秒之内又触发事件则清除定时器并开启
clearTimeout(timer);
timer = setTimeout(fn, delay);
} else {
//如果定时器未开启并触发事件则开启定时器
timer = setTimeout(fn, delay);
}
}
}
- 函数节流
function debounce(fn, delay) { //fn为在触发事件时要执行的函数, delay是延时多少触发
let flag = false
return function () {
if (flag) {
//如果在delay秒之内又触发事件则清除定时器并开启
return
} else {
flag = true
//如果定时器未开启并触发事件则开启定时器
let timer = setTimeout(() => {
fn();
clearTimeout(timer)
flag = false
}, delay);
}
}
}
- 封装私有变量
function Person(name){
var name = name;
function getName(){
return name
}
return getName
}
- 用闭包模拟私有方法
var Counter = (function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
decrement: function() {
changeBy(-1);
},
value: function() {
return privateCounter;
}
}
})();
console.log(Counter.value()); /* logs 0 */
Counter.increment();
Counter.increment();
console.log(Counter.value()); /* logs 2 */
Counter.decrement();
console.log(Counter.value()); /* logs 1 */
还有别的场景,以后有可能会继续完善,会自己手写的暂时是这四个