<-- home

javascript闭包

闭包的概念被弄的玄之又玄,好像还跟函数是编程有点关系,今天一探究竟。

  • 什么是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

上述两种形式的闭包,第二种是使用了匿名函数,我刚开始没看仔细匿名函数被小括号括起来而后又执行了,导致没有理解匿名函数,。