读书人

学习面向对象javascript(3)闭包

发布时间: 2012-11-01 11:11:33 作者: rapoo

学习面向对象javascript(三)闭包

它包含了变量a和函数F。

学习面向对象javascript(3)闭包

函数有它自己的私有空间来存储它内部的变量和函数,在某些情况下,会像下面的图一样。

学习面向对象javascript(3)闭包

如果你在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里面出来到全局空间的时候,这就形成了闭包。

学习面向对象javascript(3)闭包

这时,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实现很多复杂的功能。

读书人网 >JavaScript

热点推荐