Каковы различия между этими тремя типами шаблонов модулей? - PullRequest
4 голосов
/ 04 октября 2011
1)function () { 
    // code here...

}();

2)(function () { 
    // code here...

})();



3)(function () { 
    // code here...

}());

В чем различия (особенно третий вариант)?Они все одинаковые?

Ответы [ 3 ]

2 голосов
/ 04 октября 2011

Первый дает синтаксическую ошибку. Вторая и третья версии определяют анонимную функцию и немедленно ее выполняют. Вторая и третья версии также называются выражениями немедленного вызова функций.

Вы также можете столкнуться с другой версией, которая выглядит следующим образом. По функциональности это равно 2-й и 3-й версии, но просто сводит на нет возвращаемое значение.

!function() {
   //some code
}()
2 голосов
/ 08 марта 2013

1-й недействителен, однако вместо этого вы можете сделать следующее:

var myfunction = function () { 
    // code here...
}();

Как и в других ответах, нет разницы между вторым и третьим, они одинаковые.

Вместо использования круглых скобок также допустимо следующее:

!function() { /*  code here... */ }();
~function() { /*  code here... */ }();
+function() { /* code here... */ }();
-function() { /*  code here... */ }();
new function() { /*  code here... */ };
new function(arguments) { /*  code here... */ }(arg);

Примечание: Люди привыкли называть эти функции «Самоисполняющаяся анонимная функция», но термин неверный. Теперь они называются « Выражения немедленного вызова функций (IIFE) », произносится как «iffy»!

2 голосов
/ 04 октября 2011

2 и 3 в точности эквивалентны. Между ними нет функциональной разницы.

1 - синтаксическая ошибка. Поскольку функция не заключена в квадратные скобки, она рассматривается как объявление функции. Это неверно, потому что объявление функции должно быть названо. Скобки делают его «выражением функции»; их не нужно называть.

...