闭包以及了解函数的执行过程

本文深入探讨JavaScript中的闭包,解释其如何防止全局变量污染,以及闭包在内存管理中的角色。详细阐述了函数的执行过程,包括在堆和栈中的存储、调用机制和执行空间的生成与销毁。通过闭包,可以创建持久化的执行空间,避免变量在函数执行结束后被销毁,从而实现对外部不可见的数据进行操作。文章还介绍了闭包的基本语法,并强调了return引用数据类型时执行空间不会被销毁的重要性。
摘要由CSDN通过智能技术生成

闭包

本质作用

可以 操作 函数内部 定义的变量数据

为了防止全局变量污染 将全局变量定义 在 函数中 变成 私有变量

其他程序就 不能直接操作这个变量

再通过闭包的语法来调用操作这个数据

为了防止全局变量污染 将 变量定义在 函数中

再 通过闭包的语法 操作使用这个变量

深入了解函数 的执行原理

封装

1, 在 堆 中 创建一个 存储空间

操作系统给存储空间赋值内存地址

准备存储 函数程序

2, 将 函数程序 以 字符串形式 存储到 存储空间中

3, 将 变量/函数名称 存储 在 栈 中

变量/函数名称 中 存储的是 函数的内存地址

调用

1, 从 栈 中 存储的 变量/函数名称中 解析 内存地址

按照 内存地址 找到对应的 存储空间

读取调用 存储空间中 存储的函数程序

2, 给 函数的形参赋值实参

3, 预解析 函数程序

4, 执行 函数程序

深入了解 函数的执行过程

在 函数的存储空间中 再开辟一个独立的 存储空间

专门存储 函数中 定义的 变量和形参

函数中 定义的 变量/形参 在 函数执行时

存储在 堆 中 函数的 存储空间中

不会 存储到 栈 中

函数执行结束 函数中存储数据的 存储空间就会被 销毁/释放

存储空间中存储的 函数的 变量/形参 也会被 销毁/释放

也就是 函数执行结束 函数中 定义的变量/形参 就不会再存在了

专门存储函数 变量/形参 的 存储空间 称为 执行空间

函数执行时 生成 执行空间 存储 函数中的 变量/形参

函数执行结束 销毁/释放 执行空间 执行空间中 存储的 函数的变量/形参 也会被 销毁/释放

这样的 执行机制 / 执行原理 称为 函数执行时 JavaScript函数的内存回收机制

作用是 为了 销毁/释放 内存中的无效数据 减少 内存空间的占用 提高程序的执行效率

函数执行之前

函数程序 是 以 字符串形式存储

函数程序 没有执行 变量没有定义 变量不存在

函数执行之后

函数的执行空间被销毁

执行空间中 存储的 函数的变量/形参 也会被销毁

始终调用不到函数的原因,是因为,还没执行时,函数是以字符串的形式存储数据,所以调用不到,函数执行完成是瞬间的,执行完就删除了

所以在函数里面可以调用 函数外调用不到

生成一个不被销毁的执行空间

函数执行时 生成 执行空间 存储 函数的变量/形参

函数执行结束 执行空间 被销毁 函数的变量/形参 也会被销毁

如果 要 调用使用 函数中的数据

就需要执行空间 不会被 销毁

生成一个不会被销毁的执行空间的原理

执行空间中存储的数据 正在被使用应用

如果 销毁执行空间 js程序执行就会报错出问题

如果 函数的返回值 return 的是 引用数据类型

函数 return 的是 应用数据类型的 内存地址

函数外变量 存储的是 函数的执行结果 返回值

也就是 函数外变量 存储的是 return的 引用数据类型的内存地址

如果 函数执行结束 销毁执行空间 也就是 销毁了 引用数据类型

函数外变量 存储的内存地址 就 没有 对应的存储空间了

js程序执行就会报错

函数的执行结果 返回值 return 是 引用数据类型

执行空间 不会被 销毁

四. 闭包的基本语法

闭包的基本语法形式

有一个函数A

其中 定义存储了 变量/形参

函数A的返回值 是 一个 匿名函数

在 函数外 有 变量 存储函数A的执行结果返回值

变量储存的是 函数A的返回值 也就是 匿名函数

调用 变量() 也就是 调用 匿名函数

匿名函数的程序是 操作 函数A中 定义的变量/形参

变量() 调用 操作的就是 函数A中定义的 变量/形参

是console.log 输出的结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值