• 闭包的产生和问题


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

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

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

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

    • 应用

      • 隐藏数据

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

    闭包是怎么产生的

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

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

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

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

    闭包的应用

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

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

    闭包的注意点

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

      优点:

      ① 减少全局变量;

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

      ③ 封装;

      缺点:

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

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

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

  • 相关阅读:
    [MIT 6.830 SimpleDB] Lab1 Exercise 1-3
    uView 对象操作
    部署LVS+Keepalived高可用群集(抢占模式,非抢占模式,延迟模式)
    JSD-2204-酷莎商城(后端)-Day17,18
    Java类和对象:类是对象的模板,对象是类的实例化
    R语言使用oneway.test函数执行单因素方差分析(One-Way ANOVA)、使用aov函数执行单因素方差分析(aov函数默认组间方差相同)
    思腾云计算
    ESP32-C3 学习测试 蓝牙 篇(七、GATT 数据通信 — 发送自定义数据)
    详解c++----类和对象(二)
    【杂记-浅谈Time To Live/TTL】
  • 原文地址:https://blog.csdn.net/qq_41876456/article/details/127106583