Бен Алман представляет интересный аргумент в пользу широко используемой терминологии для этого «шаблона».
Его пост в блоге об этом здесь (http://benalman.com/news/2010/11/immediately-invoked-function-expression/).
Если его сообщение слишком длинное для вас, вот мое резюме (я все еще рекомендую прочитать его, так как это резюме много не учитывается):
Если вы хотите, чтобы именованная функция выполнялась / запускалась самостоятельно, она должна выглядеть следующим образом:
// Hello, my name is "foo". I am a named function.
// When I am invoked I invoke my self when I am invoked.
function foo(){
foo();
}
Если вы хотите, чтобы анонимная функция выполнялась / вызывалась самостоятельно, она должна выглядеть следующим образом:
// Hello, I have no name...
// (though I am assigned to the variable "foo" it's not who I am).
// When I am invoked I invoke my self when I am invoked.
// In ECMAScript 5 I no longer work. :-(
var foo = function(){
arguments.callee();
};
Если вы хотите, чтобы анонимная функция была немедленно выполнена / вызвана, она должна выглядеть следующим образом:
// Hello, I have no name. I am immediately invoked.
// People sometimes call me a "self-invoking anonymous function"...
// even though I don't invoke myself.
// Ben Alman calls me an "Immediately-Invoked Function Expression"...
// or "iffy" for short.
(function(){ /...code.../ }());
Мои собственные мысли по этому вопросу:
Другие ответы верны; то, о чем вы спрашиваете, обычно называют «вызывающей себя анонимной функцией».
Однако эта терминология не совсем точно отражает то, что на самом деле происходит; «Выражение с немедленным вызовом функции» (сокращенно «iffy») выглядит как более подходящий термин.
Забавные факты, чтобы произвести впечатление на ваших друзей:
Вы также можете создать Iffy:
!function(){
alert("immediately invoked!");
}();
или
+function(){
alert("immediately invoked!");
}();
или если вы действительно cRaZy ( пример ):
!1%-+~function(){
alert("immediately invoked!");
}();
в большинстве браузеров (если не во всех, я не уверен), и эффект будет таким же (Facebook использует версию !
).