闭包的定义可以简要的用一个函数调用另外一个函数内的变量,变量不会被销毁来概括。下面来看下闭包的使用场景:
1、 const Storage = function () { const data = [] this.set = (key, value)=>{ data[key] = value } this.get = (key)=>{ return data[key] } }
const storage = new Storage()
storage.set('test', 1)
storage.get('test') // 1
其中,变量不会因为new Storage()完成之后就消失,还是留在内存中,当调用set、get方法还能获取data变量。
我们常用到的节流防抖,也是典型的闭包案例。
2、for循环
for(var i = 0; i < 10; i++){
setTimeout(()=>console.log(i),0)
}
// 控制台输出10遍10.
for(var i = 0; i < 10; i++){
(function(a){
setTimeout(()=>console.log(a),0)
})(i)
}
// 控制台输出0-9
(一个function里面return了一个子函数,子函数访问了外面那个函数的变量)