闭包的理解

概念:当一个函数的返回值是另一个函数,而返回值的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外部被执行就产生了闭包。

闭包是一个环境,具体指的就是外部函数--高阶函数。

说的通俗一点就是一个环境,能够读取其他函数内部的变量。

本质上,闭包是将函数内部和函数外部连接起来的桥梁。

用处:1·读取内部函数的变量;

    2·这些变量的值始终会保持在内存中,不会在外层函数调用后被自动清除

优点:1·变量会一直在内存中;

      2·避免全局变量的污染;

      3·私有变量的存在;

特性:1·函数嵌套函数;

      2·内部函数可以直接使用外部函数的局部变量;

      3·变量或参数不会被垃圾回收机制回收 GC;

补充一下垃圾回收机制:

  在Js中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

缺点:变量长期储存在内存中,会增大内存的使用量 使用不当会造成内存泄露

判断闭包的3个特点:

  1·函数嵌套函数;

  2·内部函数一定操作了外部函数的局部变量;

  3·外部函数一定将内部函数返回到外部并保存在一个全局变量中;

判断闭包的执行结果:

  1·外部函数被调用了几次就有几个受保护的局部变量的副本;

  2·来自一个闭包的函数被调用几次,受保护的局部变量就变化几次;

原文地址:https://www.cnblogs.com/8023-CHD/p/10908160.html