<p>闭包的概念被弄的玄之又玄,好像还跟函数是编程有点关系,今天一探究竟。</p>
<ul>
<li>什么是javascript闭包?</li>
<li>闭包解决了什么问题?</li>
</ul>
<p>MDN上的<a href="https://developer.mozilla.org/cn/docs/Web/JavaScript/Closures">这篇文章</a>相当精彩的讲解了这个问题。</p>
<p>闭包是一种对象,只是比较特殊。以下是我理解的定义:</p>
<ul>
<li>闭包是一个函数中定义的函数,作为返回值返回。比如,函数a中定义的函数b</li>
<li>函数a中还有变量可以任由函数b来使用,这是很显然的</li>
<li>在函数a之外调用函数b的时候,函数a中的变量对函数b来讲仍然有效</li>
<li>在函数a外面能调用到函数b的是通过将函数b作为函数a的返回值返回做到的</li>
</ul>
function a() {
var x = 0;
function b() {
x++
console.log(x)
}
return b;
}
var c = a();
c();//x=1
c();//x=2
c();//x=3
var d = (function () {
var x = 0;
function b() {
x++
console.log(x)
}
return b;
})()
d();//x=1
d();//x=2
d();//x=3
<p>上述两种形式的闭包,第二种是使用了匿名函数,我刚开始没看仔细匿名函数被小括号括起来而后又执行了,导致没有理解匿名函数,。</p>