我正在关注wikipedia's example:
var counter = (function(){
var i = 0;
return {
get: function(){
return i;
},
set: function( val ){
i = val;
},
increment: function() {
return ++i;
}
};
}());
我知道有一个闭包,里面用i
变量保存堆栈框架,我可以创建多个计数器 - 这很清楚。但为什么这里使用IIFE语法?如果没有它重写代码,它的工作方式相同:
var counter2 = function(){
var i = 0;
return {
get: function(){
return i;
},
set: function( val ){
i = val;
},
increment: function() {
return ++i;
}
};
};
c2 = counter2();
我很欣赏有关IIFE在维基百科的例子中所做的解释。
答案 0 :(得分:2)
不同之处在于您实际定义了一个函数。 在您的变体中,counter2仍将作为对象c2的原型存储在内存中。
当您只创建某个类型的单个对象而不是原型以供以后重用时,会使用Iffys。
答案 1 :(得分:1)
立即调用该函数使其成为匿名函数。获得的好处是,您不会使用之后不需要的函数名称来混淆命名空间。
没有其他区别,它可能看起来像一个细节,但如果不重复使用它,为什么会命名这个函数?