闭包简介

什么是闭包?
当函数被保存到外部时,就会产生闭包(或者说是当函数执行完毕后,函数的执行期上下文尚未被销毁且保存到了函数外部)

闭包的缺点:
由于闭包不会在函数执行完毕后释放对应的作用域,所以会导致内存泄漏

闭包的作用:
1.可以当作缓存【就是说在函数内部定义了一个变量,这个变量在函数内部是不能直接访问的,只有通过闭包来访问,于是这个变量就相当于被存储起来了,等到要修改或是访问它的时候就可以通过闭包来访问了】
2. 可以实现封装,属性的私有化
3. 模块化开发,防止污染全局变量

闭包的特性:
1.封闭性:外界无法访问闭包内部的数据。如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口;
2.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在系统中,闭包中的数据依然存在,从而实现对数据的持久使用。

下面来看一个简单的例子:
代码如下:

 <script>
        function f(){
            var a = 200;
            function g(){
                return a;
            }
            return g;
        }
        console.log(f()())     // 200
        </script>

以上代码块中,函数g()就被包在函数f()内部,这是f()内部所有的局部变量对g()都是可见的,但是反之就不可以了。
这就是JavaScript特有的“链式作用域”结构,子对象一级一级的向上寻找所有的父元素对象的变量,所以父元素所有的变量对子元素对象都是可见的,反之不行。
如果我们要在f()外部读取内部的变量a,是无法直接读取的,但是g()可以读取f()里的a,这样我们就可以把g()作为返回值,然后就可以在f()外部读取里面的变量了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值