1、做数据的隐藏 -->不希望数据被外部所访问
2、做一个cache(缓存)-->小工具
什么是闭包
1、局部变量 2、返回值是函数 3、返回值函数中使用父级的变量
当不希望一个变量造成全局污染,又常驻内存,就使用闭包
function go(){
let a = 100
return function(){
console.log(a);
}
}
var fn = go()
当函数调用完毕之后a的内存会马上释放
// fn是全局变量,它没有调用a的内存就不会释放掉
fn()
闭包的实例
使用一个闭包函数,可以设置和获取内存,但是没办法直接获取内存
function createCache(){
const data = {}//闭包中的数据是隐藏,不return外部没办法直接访问
return {
set:function(key,val){
data[key] = val
},
get:function(key){
return data[key]
}
}
}
var obj = createCache()
obj.set("name","cheng")
console.log(obj.get("name"));
闭包封装函数防抖
<button id="btn">btn</button>
<script>
var btn = document.getElementById("btn")
btn.addEventListener("click",debounce(function(){
console.log(this.id);
}))
function debounce(fn,delay=500){
let timer
return function(){
if(timer){
clearTimeout(timer)
}
timer = setTimeout(()=>{
fn.call(this)
},delay)
}
}
</script>