Есть ли разница между (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.
Кроме того, считается хорошей практикой использовать парены, чтобы заключать в себе вашу функцию, независимо от того, какую форму вы выбрали.