学习面向对象javascript(三)闭包
它包含了变量a和函数F。
函数有它自己的私有空间来存储它内部的变量和函数,在某些情况下,会像下面的图一样。
如果你在a点,那么你在全局空间中。如果你在函数F中的b点,那么你即在全局空间中,又在函数F的空间中。如果你在函数N中的c点,那么你即在全局空间中,又在函数F的空间中,还在函数N的空间中。但是反过来,b不在函数N的空间里,a不在函数F和函数N的空间里。因此,在a点,不能访问b和c的东西,在b点,不能访问c点的东西。但是在c点可以访问b和a的东西,b点可以访问a点的东西。但是,当函数N从F里面出来到全局空间的时候,这就形成了闭包。
这时,N已经像a一样在全局空间中,并且函数N记住了他自己的状态,N仍然可以访问F的空间中的b。
如何让N像上面这样切断链呢?下面来看一下具体的代码是怎么实现的。
第一种可以把N声明成为一个全局的函数。
function setup(x) { var i = 0; return function(){ return x[i++]; };}var next = setup(['a', 'b', 'c']);next(); // "a"next(); // "b"next(); // "c"
?
?
利用闭包这样可以把函数内部的变量的生命周期延长,可以把局部变量暴露的特性,我们可以用javascript实现很多复杂的功能。