Skip to content

Latest commit

 

History

History
39 lines (29 loc) · 1.06 KB

闭包的使用场景.md

File metadata and controls

39 lines (29 loc) · 1.06 KB

闭包的使用场景

闭包的定义可以简要的用一个函数调用另外一个函数内的变量,变量不会被销毁来概括。下面来看下闭包的使用场景:

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了一个子函数,子函数访问了外面那个函数的变量)