13
2019
03

闭包

闭包算是js里边比较难理解的一个概念了,虽然网上一搜一大堆,但是都没说到点上,还是《JavaScript权威指南》里边讲得好。

原文:

通俗一点讲,就是:本来执行完一个函数,函数内定义的变量就会被回收掉(函数返回之后,函数的生命周期就结束了),但是,如果函数返回了一个对象,并且外部存储了这个返回值,并且这个返回的对象里边用到了函数内定义的变量,那么这个函数内定义的变量就不会被回收(虽然函数执行完返回了,但是函数的生命周期并没有结束)。

MDN上这个例子很有意思:

function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2));  // 7
console.log(add10(2)); // 12

函数makeAdder有一个局部变量x,返回了一个函数,返回函数里边用到了x,调用makeAdder时,用一个外部变量存储了返回值,这样,一个闭包就产生了,makeAdder执行完返回之后,局部变量x并没有被回收,我们可以通过add5来访问到makeAdder内部的变量x。



« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。