JavaScript плюс знак перед именем функции

Я искал информацию о функциях, вызывающих себя, и где-то наткнулся на эту запись:

+function(){}

Может кто-нибудь объяснить мне, что + знак перед функцией означает / делает?

4 ответа

Решение

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

+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!"); }();

Конечно, установка скобок вокруг всего этого также служит этой цели.

Решение и происхождение

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

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

Основное использование:

      const x = "1";
const y = "-1";
const n = "7.77";

console.log(+x);
// expected output: 1

console.log(+n);
// expected output: 7.77

console.log(+y);
// expected output: -1

console.log(+'');
// expected output: 0

console.log(+true);
// expected output: 1

console.log(+false);
// expected output: 0

console.log(+'hello');
// expected output: NaN

Когда знак расположен перед переменной, функцией или любым возвращаемым строковым представлением, вывод будет преобразован в целое число или число с плавающей запятой; унарный оператор () также преобразует нестроковые значения true, false, а также null.

Расширенное использование

Правильный способ использования функции, которую вы упомянули выше, будет:

      +function(){return "3.141"}()
// expected output: 3.141

я люблю использовать +превратить new Date()возражать против временной метки , например:

      +new Date()
// expected output: 1641387991035

Другие унарные операторы

-Унарный оператор отрицания преобразует свой операнд в числовой тип, а затем инвертирует его.

~Побитовый оператор НЕ.

!Логический оператор НЕ.

deleteОператор удаления удаляет свойство из объекта.

voidОператор void отбрасывает возвращаемое выражением значение.

typeofОператор typeof определяет тип данного объекта.

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