Javascript使用闭包来模拟对象的私有属性和方法。

最近因为一个JS项目,其中涉及私人的方法,这个概念在语言中是很常见的,许多语言都有私人的关键词,只要一种前面加上私人说一个私有方法,但Javascript不是面向对象特征的方面太多,他没有专门的关键词,。要做到这一点,你必须要使用一些JS的特征完成阶段。

首先,Javascript中有一个叫做闭包的高级特性。简单地说,JS的关闭可以理解为一种现象或特性。它通常出现在两个函数嵌套的情况下。


函数A(){
var = 1;
返回函数(){
警报(如);
}
}
var(a);




该函数返回一个函数,返回一个函数是全球范围内的C接受,因为返回函数调用的一个函数内部的变量,例如,全球范围的变量C的参考,这个封闭的形成,一个函数的内存空间是没有恢复,事实上关闭,理解和js的垃圾回收机制,垃圾收集是由JS报价计算,例如我们声明了一个函数,这个函数会引用到自己的,什么时候结束的函数参考的破坏,如果JS发现没有参考作用会破坏这种功能的内存空间,没有函数。在上面的例子中我们先运行一个函数,赋值,如1,然后返回NS一个匿名函数,该函数运行,按照原来的理论,这一功能被破坏,但当他返回一个函数,这个函数是全局变量在C参考,C是不会被摧毁,除非我们人为破坏,以及函数引用的函数变量如退货,JS引擎,如仍然是有用的,因为他仍然在使用,所以如功能包含局部变量不被破坏。

你可能不明白闭包的意思,它也涉及范围问题,我记得有人说过这个函数返回的是C,C是在全局的作用下,为什么我调用C会弹出一个函数,在里面,不应该是全局范围的EG和JS的功能是如此的地方,外界无法访问。事实上,有一种理论认为,你可以记住,JS函数范围取决于函数在定义的位置,而不是函数调用的位置,也就是说,函数在定义什么他的决定的范围,无论他所谓的在局部范围内,不会改变,这个匿名函数返回在一个函数定义,所以他的优越的范围是一个函数,而不是全球范围内。

它实际上是私有方法和闭包关系,其他语言中的私有方法是不可访问的,除非有一个特殊的接口,js的本地范围在通常情况下不受外部访问,但是上面的例子表明,通过访问闭包,我们可以使用这个特性,请参见示例:


var =(函数(){())
var页面= 100;
返回函数(){
this.auther = 'dava;
this.price = 200;
这个_page =函数(){
警报(页);
}
}
});

var =新图书();
a.auther / / 达娃
a.price / / 200
a.page / / 错
a._page(100) / /




这个例子使用一个函数自动执行一个匿名函数,并在匿名函数中定义一个局部变量的页面,然后返回一个匿名函数,和书变全球范围内被接收,此时使用新的转让书将生成一个新的对象,作者和价格属性可以直接通过对象访问,因为这些属性是在新时返回的对象定义,和页面属性是没有的,因此不能回来,但是如果我要访问的页属性,它必须依靠关闭,返回的函数在匿名函数层,它定义了一个方法在函数体的回叫_page,弹出页面贡品,根据JS范围之间的关系,目前的范围找不到页面,将上层字段找出来,以便查找。