4、闭包(含义、内存空间、作用)

简介: 4、闭包(含义、内存空间、作用)

1、什么是闭包


简单一句话概述就是,函数嵌套,内部函数就叫做闭包

闭包作为函数的返回值,赋值给了外部的变量,外部函数运行完成时,内部函数还没有被执行完成,所以外部函数中的变量是不会被销毁的,因此内部函数还可以使用外部函数的变量

闭包的作用:可以用来实现模块化或封装代码


2、为什么会有闭包?


  • 我们在访问函数的时候,不能直接访问内部函数,所以需要在外部函数设置一个返回值,把内部函数作为返回值返回出来,这样,我们外部环境才能使用内部函数,所以才会有闭包这个概念


3、闭包内存空间未被销毁,外部函数变量还保存下来


正常一个函数执行完了,里面的变量就会被销毁。


但是闭包不是,虽然外部函数已经执行完毕。但内部函数赋值给了外部的变量,所以内部函数(这个闭包)还没有被执行完成,它还存储在内存空间,所以外部函数的内存空间不能被销毁,这个外部函数的变量还保存了下来。


4、闭包有什么用?


  • 主要用来封装,将功能放到一个模块中(简称模块化)。


5、闭包代码

  <script>
    /*
    1、什么是闭包?
    简单来说就是,函数嵌套,内部函数就是闭包
    2、为什么要用闭包?
    我们不能直接访问内部函数,所以需要在外部函数设置一个返回值,
    把内部函数作为返回值返回出来,这样,我们外部环境才能用内部函数
    3、闭包的内存空间未被销毁
    正常一个函数执行完了,里面的变量就会被销毁。
    但是闭包不是,虽然外部函数已经执行完毕,但内部函数赋值给了外部的变量,
    所以内部函数(这个闭包)还没有被执行完,它还存储在内存空间,
    所以外部函数的内存空间不能被销毁,这个外部函数的变量还保存了下来。
    所以才可以输出num值
    */
    function outerFun() {
      let num = 10;
      function innerFun() {
        console.log(num);
      }
      return innerFun;
    }
    // 全局环境下拿到内部函数,相等于fun:innerFun
    let fun = outerFun();
    // 直接调用内部函数
    fun();
  </script>


相关文章
|
1月前
|
Java
JVM之本地内存以及元空间,直接内存的详细解析
JVM之本地内存以及元空间,直接内存的详细解析
99 0
|
1月前
|
JavaScript 前端开发 Java
内存管理和内存泄露(闭包、作用域链)(三)
内存管理和内存泄露(闭包、作用域链)
34 0
|
1月前
|
自然语言处理 JavaScript 前端开发
内存管理和内存泄露(闭包、作用域链)(二)
内存管理和内存泄露(闭包、作用域链)
37 0
|
1月前
|
存储 JavaScript 前端开发
|
1月前
|
缓存
内存学习(三):物理地址空间
内存学习(三):物理地址空间
101 0
|
1月前
|
Linux
linux内存不足,调整swap空间
linux内存不足,调整swap空间
37 0
|
1月前
|
存储 缓存 Unix
内存学习(一):物理地址空间内存概述
内存学习(一):物理地址空间内存概述
50 0
|
3天前
|
算法 Java
垃圾回收机制(Garbage Collection,GC)是Java语言的一个重要特性,它自动管理程序运行过程中不再使用的内存空间。
【6月更文挑战第24天】Java的GC自动回收不再使用的内存,关注堆中的对象。通过标记-清除、复制、压缩和分代等算法识别无用对象。GC分为Minor、Major和Full类型,针对年轻代、老年代或整个堆进行回收。性能优化涉及算法选择和参数调整。
13 3
|
9天前
|
算法 Java
Java垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)的一种自动内存管理机制,用于在运行时自动回收不再使用的对象所占的内存空间
【6月更文挑战第18天】Java的GC自动回收内存,包括标记清除(产生碎片)、复制(效率低)、标记整理(兼顾连续性与效率)和分代收集(区分新生代和老年代,用不同算法优化)等策略。现代JVM通常采用分代收集,以平衡性能和内存利用率。
36 3
|
14天前
|
存储 IDE 编译器
c++primer plus 6 读书笔记 第九章 内存模型和名称空间
c++primer plus 6 读书笔记 第九章 内存模型和名称空间