闭包算是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。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。