闭包介绍。

闭包是什么

MDN的解释:

closure is the combination of a function and the lexical environment within which that function
was declared.闭包,是一个变量所声明的函数+它的词法作用域的结合。


JavaScriptKit的解释

closure is the local variables for a function - kept alive after the function has returned 
闭包对于函数来说是个本地变量,这个变量是当这个函数返回的时候,变量还存在。闭包,能访问当前函数外的变量。

《JavaScript高级程序设计》的解释:


闭包是一个函数,指有权访问另一个函数作用域中的变量的函数。


《JavaScript权威指南》的解释:

从技术的角度讲,所有的JavaScript函数都是闭包。它们都是对象,它们都关联到作用域链。


简单理解


一个作用域可以访问另外一个函数内部的局部变量。

用代码实现闭包

function fn() {
    var num = 10; // 闭包可访问的上级作用域的变量
    function fun() {
        console.log(num); 
    }
    return fun; // 返回一个函数
}
var f = fn(); // 接收这个返回的函数
f(); // 调用返回的函数

 闭包的用途

1. 可以读取函数内部的变量
2. 让这些变量的值始终保持在内存中,不会在被调用后被自动清除

闭包的优点

1. 逻辑连续,当闭包作为另一个函数调用参数时,避免脱离当前逻辑而单独编写额外逻辑。
2. 方便调用上下文的局部变量。
3. 加强封装性,是第2点的延伸,可以达到对变量的保护作用。

闭包的缺点

1. 其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,
    解决方法 :
    可以在使用完变量后手动为它赋值为null
2. 由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响

 闭包的特点

1. 作为函数变量的一个引用。当函数返回时,其处于激活状态
2. 闭包就是当一个函数返回时,并没有释放资源的栈区。

 闭包的原理

因为闭包只有在被调用时才执行操作,所以它可以被用来定义控制结构。多个函数可以使用同一个环境,这使得他们可以通过改变那个环境相互交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值