Я искал информацию о немедленно вызванных функциях, и где-то я наткнулся на эту запись:
+function(){console.log("Something.")}()
Может кто-нибудь объяснить мне, что +
означает / делает знак перед функцией?
Я искал информацию о немедленно вызванных функциях, и где-то я наткнулся на эту запись:
+function(){console.log("Something.")}()
Может кто-нибудь объяснить мне, что +
означает / делает знак перед функцией?
Ответы:
Это заставляет синтаксический анализатор обрабатывать часть, следующую за
+
выражением. Это обычно используется для функций, которые вызываются немедленно, например:Без
+
него, если синтаксический анализатор находится в состоянии, в котором он ожидает оператор (который может быть выражением или несколькими операторами, не являющимися выражениями), словоfunction
выглядит как начало объявления функции, а не как выражение функции и, следовательно,()
следующее за ним (те, что в конце строки выше) будут синтаксической ошибкой (как и отсутствие имени в этом примере). С помощью+
, это делает его выражением функции, что означает, что имя является необязательным и которое приводит к ссылке на функцию, которая может быть вызвана, поэтому круглые скобки действительны.+
это только один из вариантов. Она также может быть-
,!
,~
или просто о каком - либо другом унарном. Кроме того, вы можете использовать круглые скобки (это более распространено, но ни более, ни менее правильно синтаксически):источник
Вспомогательный ответ @ TJCrowder,
+
обычно используется для принудительного числового приведения значения, как объясняется в этом SO-ответе . В данном случае это называется «унарный оператор плюс» (для удобства поиска).Таким образом, перед функцией это может быть способ заставить результат функции интерпретироваться как число. Я сомневаюсь, что это все же происходит, но теоретически JIT мог бы использовать это для компиляции функции как только числовой функции и т. Д. Однако, чтобы унарный плюс не был конкатенацией при использовании в большем выражении, вам понадобятся скобки:
источник
(+function() { ... })()
Обозначения не могут выполняться без ошибок ( за исключением того факта , что это не дает ответа на вопрос).3++function...
что это не то же самое.+function...
само по себе излишне. Такой же результат может быть достигнут,blah + function( ){ ... }( );
что сведет на нет необходимость в оберточных скобках.Таким образом, краткий ответ заключается в том, что он предотвращает синтаксическую ошибку, так или иначе используя результаты функции.
Вы также можете указать движку, что вас не интересует возвращаемое значение, используя
void
оператор:Конечно, установка скобок вокруг всего этого также служит этой цели.
источник