JS基础——闭包

101 阅读1分钟

什么是闭包

简单概括:

一个持有外部环境变量的函数就是闭包。

引用维基百科:

闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

也可理解为

作用域的特殊情况,有两种表现:
1.函数作为返回值;
2.函数作为参数

  • 函数作为返回值
// 函数作为返回值

function create() {
    const a = 100;
    return function() {
        conosole.log(a)
    }
}

const fn = create()
const a = 200
fn()    // 100
  • 函数作为参数被传递
// 函数作为参数被传递
function print(fn) {
    let a = 100
    fn()
}
let a = 200
function fn() {
    console.log(a)
}
print(fn)   // 100

其中,在闭包中所有自由变量的查找,是在函数定义的地方,向上级作用域查找,而不是在执行的地方。

实际开发中闭包的应用场景

隐藏数据,只提供api

function createCache() {
    const data = {}
    return {
        set: function (key, val) {
            data[key] = val
        }
        get: function (key) {
            return data[key]
        }
    }
}

data.b = 200

const c = createCache()
c.set('a',100)
console.log(c.get('a'))