js什么情况下使用闭包?

作者:admin / 时间:3年前 (2017/07/02) / 分类:前端开发 / 阅读:639 / 评论:0

1.实现封装

可以先来看一个关于封装的例子,在person之外的地方无法访问其内部的变量,而通过提供闭包的形式来访问:

var person = function(){

//变量作用域为函数内部,外部无法访问

var name = "default";

return {

getName : function(){

return name;

},

setName : function(newName){

name = newName;

}

}

}();

print(person.name);//直接访问,结果为undefined

print(person.getName());

person.setName("abruzzi");

print(person.getName());

//得到结果如下:

//undefined

//default

//abruzzi

2.闭包的另一个重要用途是实现面向对象中的对象

传统的对象语言都提供类的模板机制,这样不同的对象(类的实例)拥有独立的成员及状态,互不干涉。虽然JavaScript中没有类这样的机制,但是通过使用闭包,我们可以模拟出这样的机制。还是以上边的例子来讲:

function Person(){

var name = "default";

return {

getName : function(){

return name;

},

setName : function(newName){

name = newName;

}

}

};

var john = new Person();

print(john.getName());

john.setName("john");

print(john.getName());

var jack = new Person();

print(jack.getName());

jack.setName("jack");

print(jack.getName());

//运行结果如下:

//default

//john

//default

//jack

由此代码可知,john和jack都可以称为是Person这个类的实例,因为这两个实例对name这个成员的访问是独立的,互不影响的。

闭包最重要的一个作用就是把某些变量隐藏起来,让外面的程序不能直接访问。

闭包的优点:增加了函数的灵活性;可以访问到函数内部的变量或对象;保护函数内的变量安全,加强了封装性

缺点:资源常驻内存,容易造成资源的浪费和引发性能问题


没有评论,留下你的印记,证明你来过。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。