1.0 什么是闭包

什么是闭包

有权访问其他函数作用域中变量函数。在 javascript 中,只有函数内部的子函数才能访问局部变量,所以闭包可以理解成"定义在函数内部的函数"。
在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

闭包最典型的应用是 实现回调函数(callback)。

不必纠结到底怎样才算闭包,其实你写的每个函数都算作闭包。即使是全局函数,你访问函数外部的全局变量时,就是闭包的体现。

创建闭包的常见方式

在一个函数内部创建另一个函数

举例说明闭包的形成

function a(){
    var i = 0;
    function b(){
        alert(++i);
    }
    return b;
}
var c = a();
c();

这段代码有两个特点:

  1. 函数 b 嵌套在函数 a 内部;
  2. 函数 a 返回函数 b

这样在执行完 var c = a() 后,变量 c 实际上指向了函数 b,再执行 c()就会弹出一个窗口显示 i 的值(第一次为1)。这段代码其实就创建了一个闭包。为什么?因为函数a外部的变量 c 引用了 函数a内部的函数b。就是说:当函数a内部的函数b函数a外部的一个变量引用的时候,就创建了一个闭包

闭包的作用

闭包可以用在许多地方。它的最大用处有两个

  1. 读取函数内部的变量
  2. 让变量始终保存在内存中

闭包的缺点

  1. 闭包会常驻内存,会增大内存的使用量。
  2. 使用不当很容易造成内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值