Есть ли разница между (function() {...}()); и (function() {...})();?

Возможный дубликат:
Расположение скобок для автоматического выполнения анонимных функций JavaScript?

Иногда я вижу:

(function() { ... }()); 

и иногда я вижу:

(function() { ... })(); 

Я вижу обе формы с аргументами и без них. Они оба выполняют анонимную функцию.

Есть ли разница между этими двумя формами? Есть ли веские причины использовать одну форму поверх другой?

3 ответа

Решение

В этих двух формах нет практической разницы, но с грамматической точки зрения разница между ними заключается в том, что оператор группировки - круглые скобки - будет содержать в первом примере CallExpression, что включает в себяFunctionExpression:

значение вложенного Выражения Call
                |         |
       FunctionExpression |
                |         |
                В.В.
    (function() {       }());
    ^                      ^
    |--PrimaryExpression - |

Во втором примере мы имеем первое целое CallExpression, который держит FunctionExpression:

          PrimaryExpression | FunctionExpression | V (function () {}) (); ^ ^ | - CallExpression  - |

Там нет никакой разницы между ними, насколько это касается компилятора. Тем не менее, обнаружит, что (function () {}()) Стиль рекомендуется в соглашениях JavaScript Дугласа Крокфорда.

Что касается различий, это действительно просто синтаксический сахар. В некоторой степени эквивалентно: "Вам нравится jQuery() или $()?" Оба могут быть скомпилированы, выполнены и использованы взаимозаменяемо (AFAIK).

Из примеров кода, которые я видел до сих пор, больше людей, кажется, следуют соглашению кода Крокфорда:

(function() { ... }()); 

Лично я предпочитаю (function(){})(); условность, потому что для меня более очевидно, что функция выполняется самостоятельно; Я также большой пользователь jQuery, и это соглашение используется в исходном коде jQuery.

Кроме того, считается хорошей практикой использовать парены, чтобы заключать в себе вашу функцию, независимо от того, какую форму вы выбрали.

Другие вопросы по тегам