闭包的概念被弄的玄之又玄,好像还跟函数是编程有点关系,今天一探究竟。
- 什么是javascript闭包?
- 闭包解决了什么问题?
MDN上的这篇文章相当精彩的讲解了这个问题。
闭包是一种对象,只是比较特殊。以下是我理解的定义:
- 闭包是一个函数中定义的函数,作为返回值返回。比如,函数a中定义的函数b
函数a中还有变量可以任由函数b来使用,这是很显然的
在函数a之外调用函数b的时候,函数a中的变量对函数b来讲仍然有效
在函数a外面能调用到函数b的是通过将函数b作为函数a的返回值返回做到的
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
上述两种形式的闭包,第二种是使用了匿名函数,我刚开始没看仔细匿名函数被小括号括起来而后又执行了,导致没有理解匿名函数,。