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