如何理解闭包

概念:

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

特性:
1. 可以读取函数内部的变量
2. 可以使变量保存在内存中

// 例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

猜你喜欢

转载自blog.csdn.net/qinchao_qbsh/article/details/82699809