闭包小理解

千锋逆战班,木子打卡第一天
首先,了解闭包我们需要首先了解一下函数的两个阶段

一、函数的两个阶段

1.函数定义阶段

    1. 开辟一个函数存储空间
    2. 把代码存放再函数存储空间内
    3. 把空间地址赋值给函数名

2.函数调用阶段

    1. 按照函数名存储的地址找到存储空间
    2. 再次开辟一个函数执行空间
    3. 在执行空间内部进行形参赋值
    4. 在执行空间内部进行预解析
    5. 把存储空间的代码复制一份到执行空间内部执行
    6. 代码执行完毕以后, 执行空间销毁

代码执行完毕以后, 执行空间销毁在代码执行完毕以后, 执行空间销毁这里插入图片描述

在这里插入图片描述

 

3.什么是一个不会销毁的函数执行空间?

    当函数里面返回一个复杂数据类型
    并且在函数外部有变量引用这个被返回的复杂数据类型的时候
    这个函数执行空间不会销毁

在这里插入图片描述
这时res接收的是一个数组,这个执行空间不会被销毁

二、什么是闭包?
在这里插入图片描述

在这里插入图片描述
res接受的就是a函数执行之后的返回值,返回的是一个复杂数据类型(函数b)闭包就是函数内部的函数

三、闭包生成的三个必要条件

1.函数 A 内部直接或者间接返回一个函数 B
2.函数 B 内部使用着函数 A 的私有数据
3.函数 A 外部有变量引用着函数 B
形成一个不会销毁的空间
小延展:什么叫直接或间接返回函数b?
直接:直接返回一个函数return function b() {}
间接:间接返回一个函数,return一个对象或数组,这个对象或数组里面有一个函数

在这里插入图片描述
Return的是一个对象,对象里包含着函数

四、 闭包的特点

    1. 延长变量的声明周期
        优点: 变量会一直存在
        缺点: 一个不会销毁的函数执行空间
    2. 可以在函数外部访问内部数据
        优点: 函数外部访问内部数据
        缺点: 一个不会销毁的函数执行空间
    3. 保护私有变量
        优点: 内部的变量不能再外部访问
        缺点: 闭包空间可以访问内部数据

 五、闭包的应用

多用于循环绑定事件,否则点击事件是打印出的i始终存在变量泄露,使用闭包延长了变量的声明周期

在这里插入图片描述

在这里插入图片描述
中国加油,武汉加油。千锋加油,我自己加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值