JS闭包

1、什么是闭包?

做用域应用的特殊状况(有两种):
函数做为参数被传递
函数做为参数被返回闭包

1.函数做为参数被传递:

function print(fn){
    let a = 200
    fn()
}
let a = 100
function fn(){
    console.log(a)
}

print(fn)

//100

2.函数做为参数被返回

function create(){
    let a = 100
    return function(){
        console.log(a)
    }
}

let fn = create()
let a = 200
fn()

//100

3.自由变量

什么是自由变量?

当前做用域没有定义可是使用了,须要咱们去沿着做用域链查找的变量。函数

自由变量的查找规则?

在函数定义的地方,向上级做用域查找,而不是执行的地方!!!工具

2、实际开发过程当中闭包的应用

好比隐藏数据(作一个简单的cache工具)

function createCache(){
        let data = {}  //闭包中的数据,被隐藏,不被外界访问
        return {
            set(val, key){
                data[val] = key
            },
            get(key){
                return data[key]
            }
        }
    }

    let c = createCache()
    c.set('a', 100)
    console.log(c.get('a'))
    //100(这样就只能经过c.get和c.set来访问和设置data, 而不能再函数外随意修改和获取data的值)
相关文章
相关标签/搜索