javascript - 关于匿名自执行函数的问题
本文介绍了javascript - 关于匿名自执行函数的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
以下两种代码有什么区别?有何有缺点?谢谢
//第一种
var counter = (function(){
var i = 0;
return {
get: function(){
return i;
},
set: function(val){
i = val;
},
increment: function(){
return ++i;
}
}
}());
//第二种
var counter = {
var i = 0;
get: function(){
return i;
},
set: function(val){
i = val;
},
increment: function(){
return ++i;
}
}
解决方案
第二种是对象字面量的书写方式,但你的写法是错误的,正确写法应该是:
var counter = {
i: 0,
get: function(){
return this.i;
},
set: function(val){
this.i = val;
},
increment: function(){
return ++this.i;
}
}
这种写法不会隔离作用域,也就是说外部可以直接访问内部的属性,并可以修改他,如:count.i。
而第一种写法实际上是一种闭包,他可以避免这个问题,即外部环境只能通过你暴露的接口访问内部属性,很好的隔离了作用域。但缺点是可能会造成内存泄漏,用大量闭包也会占用大量内存。
这篇关于javascript - 关于匿名自执行函数的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文