以下两种代码有什么区别?有何有缺点?谢谢
//第一种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; } }
数据分析师2017-10-01 00:17:01
Questions about anonymous self-executing functions - PHP Chinese website Q&A - Questions about anonymous self-executing functions - PHP Chinese website Q&A
Take a look around and learn.
巴扎黑2017-02-14 11:07:11
第二种是对象字面量的书写方式,但你的写法是错误的,正确写法应该是:
var counter = { i: 0, get: function(){ return this.i; }, set: function(val){ this.i = val; }, increment: function(){ return ++this.i; } }
这种写法不会隔离作用域,也就是说外部可以直接访问内部的属性,并可以修改他,如:count.i。
而第一种写法实际上是一种闭包,他可以避免这个问题,即外部环境只能通过你暴露的接口访问内部属性,很好的隔离了作用域。但缺点是可能会造成内存泄漏,用大量闭包也会占用大量内存。