javascript IIFE感(示例分析)

时间:2013-06-24 17:26:31

标签: javascript iife

我正在关注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在维基百科的例子中所做的解释。

2 个答案:

答案 0 :(得分:2)

不同之处在于您实际定义了一个函数。 在您的变体中,counter2仍将作为对象c2的原型存储在内存中。

当您只创建某个类型的单个对象而不是原型以供以后重用时,会使用Iffys。

答案 1 :(得分:1)

立即调用该函数使其成为匿名函数。获得的好处是,您不会使用之后不需要的函数名称来混淆命名空间。

没有其他区别,它可能看起来像一个细节,但如果不重复使用它,为什么会命名这个函数?