闭包,它是一个函数,它是一个读取其他函数内部变量的函数,也就是说在一个函数内部返回的还是一个函数,它可以用于计数器困境和定时打印数值。
闭包的优点是可以延伸变量的作用范围,可以从函数外部去访问内部局部变量,还可以延长变量生命周期,当函数执行完后局部变量不释放继续保存在内存中。
闭包缺点,不安全是其一,为什么说不安全,由于函数可以从外部去访问内部,换个方向想,从外部也可以改变内部变量的值。性能差是其二,还从闭包优点来看,延长函数的生命周期是好事,可是函数中的变量都会被保存在内存中,这样内存消耗会很大的,很容易就造成网页的性能问题。
另外,防抖和节流也用到了闭包。防抖和节流一般用于鼠标操作
防抖就是说在一个规定的时间内,只有最后一次操作,这个事件才会成功。
// 防抖
function debounce(fn, wait) {
let timer = null
return function() {
if(timer !== null){ clearTimeout(timer) }
timer = setTimeout(fn, wait);
}
}
// 使用
document.documentElement.onmousemove = debounce(function(){
console.log('dosomething...');
},2000)
节流是说在一个规定的时间内,不管你操作了多少次,都会当做一次事件。
throttle(fn, delay) {
var prev = Date.now()
return function() {
var now = Date.now()
if (now - prev > delay) {
fn()
prev = Date.now()
}
}
}
// 使用
document.documentElement.onmousemove = throttle(function(){
console.log('dosomething...');
},2000)