2016-01-25 3 views
0

Я хочу использовать замыкание в myObj, чтобы я мог увеличивать myIndex, не добавляя myIndex в глобальное пространство имен (ака, в TaskHandler).Как передать переменную в IIFE?

Это работает. Но я также должен пройти в myValue к закрытию. Я думал, что пройти через (function (param) { })(myValue); был способ сделать это. Но это не определено.

TaskHandler.myFunction(value); 

TaskHandler = { 

    myFunction : function (value) { 
     this.myObj.run(value); 
    }, 

    myObj : { 

     run : function (value) { 
      this.doIt(value); 
     }, 

     doIt : (function (value) { 
      var myIndex = 0; 
      return function() { 
       myIndex++; 
       doSomethingWithValue(myIndex, value); //value undefined 
      } 
     })(value) 

    }, 

};

ответ

2

Функции ваших IIFE возвращение должно принимать значение аргумент, а не сам IIFE:

doIt : (function() { 
     var myIndex = 0; 
     return function (value) { 
      myIndex++; 
      doSomethingWithValue(myIndex, value); 
     } 
    })() 
+0

Когда это то, что вы проходите через параметры IIFE тогда? – Growler

+0

@Growler, когда у вас есть значение, которое вы хотите передать в момент выполнения IIFE. У вас нет значения, которое вы хотите передать в тот момент (когда созданная объектизация), вы получите его позже, когда вызывается run, и в этот момент 'this.doit' является ссылкой на внутреннюю анонимную функцию , 'this.doit' никогда не ссылается на IIFE, так как он выполняет немедленно и возвращает внутреннюю функцию. – Paulpro

Смежные вопросы