欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

教你如何理解闭包

程序员文章站 2022-08-13 18:48:43
> 落日夕霞的博客... > 如何理解闭包 -->  如何理解闭包 概念: 闭包:指能够读取其他函数内部变量的函数。 特性:...

    如何理解闭包

    概念:

    闭包:指能够读取其他函数内部变量的函数。

    特性:

    可以读取函数内部的变量 可以使变量保存在内存中
    // 例1:
    function f() {
    	var n = 1;
    	return function () {
    		console.log(n); 
    	}
    }
    var res = f();
    res(); // 1(可以读取f函数内部变量n的值)
    
    //例2:
    function f1(){
     var n = 1;
     add = function () { // 未使用var定义,此时的add为全局函数
        n += 1
      }
     function f2() {
      console.log(n);
     }
     return f2;
    }
    
    /*操作一*/
    var res = f1()
    res() // 1
    add()
    /**函数f2被赋给变量res,f2始终存在于内存中,而f2又依赖f1函数中的变量n,
    故f1也始终在内存中,不会在调用结束后,被垃圾回收机制回收。*/
    res() // 2
    
    // 若未赋值给res,如下:
    /*操作二*/
    f1()(); // 1(未持有函数的引用,调用完成即被垃圾回收机制回收)
    add();
    f1()(); // 1
    

    闭包的缺点:函数中的变量始终被保存在内存中,消耗内存,可能会造成内存泄漏。

    //清除所有调用完成后不需要使用的变量
    function f1(){
     var n = 1;
     add = function () {
        n += 1
      }
      return {
        f2: function () {
          return n
        },
        clear: function () {
          n = null
        }
      }
    }
    
    var res = f1()
    console.log(res.f2()) // 1
    add()
    console.log(res.f2()) // 2
    res.clear()
    console.log(res.f2()) // null