JS闭包

Posted winter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS闭包相关的知识,希望对你有一定的参考价值。

一、什么是闭包?

作用域应用的特殊情况(有两种):
函数作为参数被传递
函数作为参数被返回

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.自由变量

什么是自由变量?

当前作用域没有定义但是使用了,需要我们去沿着作用域链查找的变量。

自由变量的查找规则?

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

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

比如隐藏数据(做一个简单的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的值)

以上是关于JS闭包的主要内容,如果未能解决你的问题,请参考以下文章

JS闭包的概念

(原创)JS闭包看代码理解

关于JS闭包

js闭包的作用

js闭包

js的闭包