首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

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

2012-11-01 
学习面向对象javascript(三)闭包它包含了变量a和函数F。函数有它自己的私有空间来存储它内部的变量和函数,

学习面向对象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实现很多复杂的功能。

热点排行