浅浅谈Js闭包

丶灬走出姿态 提交于 2020-02-24 08:04:13

闭包就是能够读取其他函数内部变量的函数。由于在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。

要了解闭包,首先了解函数,函数分为两个阶段。

函数定义阶段:

  1. 在内存中开辟一个存储空间
  2. 把函数体内的代码当作字符串一摸一样的放在这个空间中,碰到的所有变量都不进行解析
  3. 把这个空间地址赋值给函数名(变量名)

函数调用阶段

  1. 按照函数名(变量名)找到对应的存储空间
  2. 从新开辟一个函数 执行空间
  3. 在这个执行空间里面进行形参赋值
  4. 在这个执行空间里面进行预解析
  5. 把函数存储空间的代码复制一份到执行空间里面执行一遍
  6. 执行完毕之后, 这个开辟出来的执行 空间销毁
    注意: 每一次函数调用都会开辟一个执行空间
    调用一次,开辟一个执行空间,执行完毕代码销毁。
    再次调用的时候,再次开辟一个执行空间,执行完毕代码销毁

闭包:

     function a(){            
    //这个num变量就是函数a的私有变量           
     var num = 100;
        return function b(){
                	 console.log(num);           
               }        
     }
    //res接受的就是函数a内部返回的一个复杂数据类型(函数b)        
 	   var res = a();       
     //res接受的就是函数b的执行空间的地址,就是函数a执行以后的返回值             
      res()        
      // 当 res 调用的时候, 打印 num       
       //   打印出来的就是 a 函数内部的私有变量 num 的值

闭包的三个条件:

     1.在函数A内部直接或者间接返回一个函数B           
     2.B函数内部使用着A函数的私有变量(私有数据)         
     3.A函数外部有一个变量接收着函数B,形成了一个不会销毁的函数空间

闭包的特点:

  1. 延长了变量的生命周期
    优点: 因为执行空间不销毁, 变量也没有销毁
    缺点: 因为执行空间不销毁, 会一直存在在内存中
  2. 可以访问函数内部的私有变量
    优点: 利用闭包函数可以访问函数内部的私有变量
    缺点: 执行空间不会销毁, 会一直存在在内存中
  3. 保护私有变量(只要是函数, 就有这个特点)
    优点: 保护私有变量不被外界访问
    缺点: 如果向访问, 必须要利用闭包函数

闭包的作用:

  1. 就是当你需要延长变量的声明周期的时候
  2. 或者你需要访问某一个函数内部的私有数据的时候
  3. 你可以使用 闭包 函数来解决
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!