当前位置: 移动技术网 > IT编程>网页制作>CSS > 教你如何理解闭包

教你如何理解闭包

2019年01月14日  | 移动技术网IT编程  | 我要评论

    如何理解闭包

    概念:

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

    特性:

    可以读取函数内部的变量 可以使变量保存在内存中
    // 例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
    

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网