概念
函数和对其周围状态的引用捆绑在一起构成了闭包
周围状态,也就是词法环境。
闭包,可以让内部函数访问外部作用域,在Javascript中,每当函数被创建,就会在函数生产时生成闭包。
闭包的一些应用
闭包的使用的一些场景,柯里化,节流,防抖
最简单的一个节流
function throttle(fn,times){ // 整个throttle为周围状态,或者词法环境
let t1 = true // 相对return 的函数就是外部
return function(){
if(!t1){ // 内部使用
return false;
}
t1 = false
let time = setInterval(()=>{
fn.apply(this)
t1 = false
},times)
}
}
最简单的一个柯里化
function carling(fn,...args){
let length = fn.length //判断当前传入函数的长度
return function (...nextArgs){
var allArgs = [...args, ...nextArgs]
if(nextArgs.length == 0){ // 当没有参数的时候我们执行传进来的函数
return fn.apply(fn,allArgs)
}
return carling(fn,...allArgs)
}
}
简单的节流
function debounce(fn,delay){
let timer = null
return function (){
if(timer){
clearTimeOut(timer)
timer = setTimeOut(fn,delay)
}else{
timer = setTimeOut(fn,delay)
}
}
}
PS.说是闭包,其实我是来回顾防抖节流的,下次一定!!