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