• 闭包的产生和问题


    • 在闭包就是在函数里面声明函数,实际开发中主要应用于封装变量,保护变量不受外界污染,也相当于是在函数作用域里面再声明一个内部作用域,这样执行结果拿到的变量都是不同的,拿的就不是全局变量

    • 函数和对其周围状态的引用捆绑在一起构成闭包,就是一个函数可以访问另一个函数里的变量,

    • 闭包是一种现象,发生过程:某函数执行时,里面有函数被定义,并被返回

    • 作为参数被传入 作为返回值被返回,总之被定义和执行的地方不一样

    • 应用

      • 隐藏数据

        ```javascript
        function createCache() {
          const data = {};
          return {
            set: function (key, val) {
              data[key] = value;
            },
            get: function (key) {
              return data[key];
            },
          };
        }
        ```
        

    闭包是怎么产生的

    • 通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。但是,在创建了一个闭包以后,这个函数的作用域就会一直保存到闭包不存在为止。

    • 在 javascript 中,如果一个对象不再被引用,那么这个对象就会被垃圾回收机制回收;

    • 如果两个对象互相引用,而不再被第 3 者所引用,那么这两个互相引用的对象也会被回收。

    • 闭包只能取得包含函数中任何变量的最后一个值

    闭包的应用

    • 一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

    • 可以读出函数内部的变量,正常情况下,外部函数是无法读取到内部函数的变量的,所以可以说:闭包就是将函数内部和函数外部连接起来的一座桥梁,即函数作为参数传递
      由于对象内的变量一直被引用,所以这对象不会被垃圾回收机制回收。可以始终保持在内存中

    闭包的注意点

    • 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

      优点:

      ① 减少全局变量;

      ② 减少传递函数的参数量;

      ③ 封装;

      缺点:

      ① 使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等

      面试官:正好你提到了内存泄漏,说说你的解决方法

      应聘者:简单的说就是把那些不需要的变量,但是垃圾回收又收不走的的那些赋值为null,然后让垃圾回收走;

  • 相关阅读:
    【题解】JZOJ3852 单词接龙
    SpringMVC拦截器
    ping多个IP的工具
    本周XR新闻:吴德周成立AR硬件公司,SideQuest支持PICO、Magic Leap
    2023年软件测试已经崩盘了吗,为什么都找不到工作了?
    Spring boot 集成 xxl-job
    智慧公厕技术解析 | 提高公厕管理效率的关键
    蓝牙资讯|苹果 AirPods Pro 2正式发布,有惊喜也有遗憾
    关闭EasyConnect进程详细步骤
    JavaScript | Hello World?【三】
  • 原文地址:https://blog.csdn.net/qq_41876456/article/details/127106583