js闭包什么时候用(js闭包的典型应用场景)
导语:「原创整理」js什么情况下使用闭包?
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这个成员的访问是独立的,互不影响的。
闭包最重要的一个作用就是把某些变量隐藏起来,让外面的程序不能直接访问。
闭包的优点:增加了函数的灵活性;可以访问到函数内部的变量或对象;保护函数内的变量安全,加强了封装性
缺点:资源常驻内存,容易造成资源的浪费和引发性能问题
免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小茜创作整理编辑!