0

我正在关注维基百科的示例

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 在做什么。

4

2 回答 2

2

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

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

于 2013-06-24T17:34:46.733 回答
1

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

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

于 2013-06-24T17:27:46.327 回答