Разница между (function () {}) (); и функция () {} ();

Possible Duplicate:
Are “(function ( ) { } ) ( )” and “(function ( ) { } ( ) )” functionally equal in JavaScript?

Это то, что я еще не совсем понял, но я использовал function () {} () только потому, что моя подсветка синтаксиса VIM проваливается, если я добавляю круглые скобки, хотя я видел (function () {}) () много раз, может быть, дело в IE?

редактировать:

var singleton = function() {
    // code
}();

var singleton = (function() {
    // code
})();

не могли бы вы дать немного больше контекста?

Jesse Pepper 08.01.2009 07:08

Почему VIM не может обрабатывать паренсы? Я удивлен, что так много людей используют его, если он не справляется с этим случаем.

recursive 08.01.2009 07:32

Да, подсветка синтаксиса Javascript отключается для всего блока кода между скобками.

Luca Matteis 08.01.2009 07:34

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

Sean McMillan 27.01.2010 22:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
38
4
17 423
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Нет. Без круглых скобок один оператор, содержащий выражение функции, приведет к синтаксической ошибке.

Tim Down 27.01.2010 03:55

Все два примера, предоставленные OP, являются функциональными выражениями и не будут иметь синтаксической ошибки даже при удалении этой скобки. Только объявление функции.

bryantsai 28.01.2010 09:41

@bryantsai: у вас есть смысл в том, что пример OP (добавленный позже) использует выражение функции как часть назначения и, следовательно, не требует скобок, но вопрос более общий, и этот ответ вводит в заблуждение. Кроме того, меня смущает то, что вы предлагаете в своей ссылке на объявления функций.

Tim Down 28.01.2010 12:53

Я предполагаю, что заголовок немного непоследователен относительно двух примеров OP. Однако, глядя на содержание вопроса, а также на два основных ответа, я считаю, что они правы. Кроме того, говоря об объявлении функции, я имею в виду, что круглые скобки имеют значение только при использовании в объявлении функции. Объявление функции не может быть вызвано немедленно. Но если "сгруппировано" внутри круглых скобок, объявление функции становится выражением функции и поэтому может быть вызвано немедленно. Я имел в виду, что оба примера OP 2 - это все функциональные выражения, и, следовательно, с круглыми скобками или без них не имеет значения.

bryantsai 28.01.2010 14:00

Хорошо, я вижу. Моя точка зрения все еще остается в силе: утверждение, состоящее исключительно из выражения функции (например, function() { alert("1"); }), является синтаксической ошибкой.

Tim Down 28.01.2010 18:27

В этом отношении с вами никто не возражает. В самом деле, никто вообще ничего не сказал об операторах, а OP явно использовал их как выражения.

Henk 03.02.2010 00:08
function(){}();

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

(function(){})();

тогда браузер будет знать, что последняя скобка должна быть применена ко всем выражениям

function(){}

UPD: Если вы не используете скобки, браузер может вас неправильно понять. Если вы просто вызываете функцию и отклоняете результат

function() {
    alert(1);
}();

тогда ff и ie выдадут ошибку

функция () {} (); работает во всех браузерах, если это выражение функции. В частности, var foo = function () {} (); работает. Прочтите yura.thinkweb2.com/ named-function-expressions/#expr-vs-decl для получения дополнительной информации.

user123444555621 23.09.2009 16:39
Ответ принят как подходящий

Питер Мишо обсуждает разницу в Важная пара родителей.

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

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