Если вы развернете
var foo = (function(){...})();
foo();
, вы получите это:
function temp() {
...
}
foo = temp();
Как видите, вы вызываете функцию temp (выделено здесь жирным шрифтом): var foo = (function(){...})
()
;
.Это означает, что foo
присваивается не объекту функции, а возвращаемому значению этого вызова функции.Поэтому, если временная функция не возвращает функцию (и в этом случае вам может потребоваться рефакторинг), значение, хранящееся в foo
, не будет вызываться.
В JavaScript есть два способа сохранитьобъект функции:
A) Передать функцию без ее вызова (т. е. foo = bar;
вместо foo = bar()
).
B) (если вам нужно передать параметры) передать вызов функции, заключенный в другую функцию (без вызова функции-оболочки) (т.е. foo = function {bar(param1, param2);};
вместо foo = function {bar(param1, param2);}();
(обратите внимание на ()
в конце? - вы этого не хотите) ).