Я искал информацию о самозапускающихся функциях, и где-то я наткнулся на это обозначение:
+function(){}
Может кто-нибудь объяснить мне, что знак +
перед функцией означает/делает?
Я искал информацию о самозапускающихся функциях, и где-то я наткнулся на это обозначение:
+function(){}
Может кто-нибудь объяснить мне, что знак +
перед функцией означает/делает?
Это заставляет парсер обрабатывать часть, следующую за +
, как выражение. Обычно это используется для функций, которые вызываются немедленно, например:
+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"; })());
Таким образом, короткий ответ заключается в том, что он предотвращает синтаксическую ошибку, используя функцию, так или иначе.
Вы также можете указать движку, что вас даже не интересует возвращаемое значение с помощью оператора void
:
void function() { console.log("Foo!"); }();
Разумеется, использование этой фигуры также служит этой цели.