JavaScript闭包

Js闭包:

什么是闭包闭包的特点? 闭包的作用?

闭包?

闭包就是JavaScript中,函数的一种高级应用

在聊闭包之前我们要先回顾一下 函数

函数定义阶段
1.开辟一个存储空间
2.把函数体内的代码一模一样的放在这个空间(不解析变量)
3.把存储空间的地址给函数名
在这里插入图片描述

函数调用阶段
1.按照函数名的地址找到函数的存储空间
2.形参赋值
3.预解析
4.将函数存储空间中的代码拿出来执行(才解析变量)
在这里插入图片描述
函数执行空间

  • 每一个函数会有一个 存储空间
  • 但是每一次调用都会生成一个完全不一样的 执行空间
  • 并且 执行空间 会在函数执行完毕后就销毁了,但是 存储空间 不会
  • 那么这个函数空间执行完毕就销毁了,还有什么意义呢?
    • 我们可以有一些办法让这个空间 不销毁
    • 闭包,就是要利用这个 不销毁的执行空间

函数执行空间不销毁

  • 函数的 执行空间 会在函数执行完毕之后销毁

  • 但是,一旦函数内部返回了一个 引用数据类型,并且 在函数外部有变量接受 的情况下

  • 那么这个函数 执行空间 就不会销毁了
    在这里插入图片描述

  • 函数执行的时候,会生成一个函数 执行空间 (我们暂且叫他 xxff00

  • 代码在 xxff00 空间中执行

  • xxff00 这个空间中声名了一个 对象空间(xxff11

  • xxff00 这个执行空间把 xxff11 这个对象地址返回了

  • 函数外部 0 接受的是一个对象的地址没错

    • 但是是一个在 xxff00 函数执行空间中的 xxff11 对象地址
    • 因为 o 变量一直在和这个对象地址关联着,所以 xxff00 这个空间一直不会销毁
  • 等到什么时候,执行一句代码 o = null

    • 此时, o 变量比在关联在 xxff00 函数执行空间中的 xxff11 对象地址
    • 那么,这个时候函数执行空间 xxff00 就销毁了

闭包
1.闭包就是利用这个函数执行空间不销毁的逻辑
2.有几个条件组成闭包

不销毁的空间
1.闭包的第一个条件就是利用了不销毁的逻辑
2.只不过不是返回一个对象数据类型
3.而是返回一个 函数数据类型
在这里插入图片描述

闭包概念:
1.有一个A函数,再A函数内部返回一个B函数
2.再A函数外部有变量引用这个B函数
3.B函数内部访问着A函数内部的私有变量
*以上三个条件缺一不可
在这里插入图片描述
闭包的特点:

1.作用域空间不销毁
优点:因为不销毁,变量页不会销毁,增加了变量的生命周期
缺点:因为不销毁,会一直占用内存,多了以后就会导致内存溢出
2.可以利用闭包访问再一个函数外部访问内部的变量
优点:可以再函数外部访问内舒数据
缺点:必须要时刻保持引用,导致函数执行栈不被销毁
3.保护私有变量
优点:可以把一些变量放在函数里面,不会污染全局
缺点: 要利用闭包函数才能访问,不是很方便

闭包函数的缺点** 致命:****

由于内存空间有一个不会被销毁的东西那么就会出现内存占用,如果过多,就会导致内存溢出,那就会出现内存泄漏 所以慎用闭包!

闭包的作用:

  1. 当你需要延长变量的声明周期
  2. 或者需要访问某一个函数内部的私有数据的时候
  3. 就可以使用 闭包 函数 来解决

关键字: 函数

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值