9

JavaScript: Знак плюс перед функциональным выражением

15

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

+function(){console.log("Something.")}()

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

2 ответ(ов)

13

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

+function() { console.log("Foo!"); }();

Если + не будет, и парсер окажется в состоянии, ожидающем оператор, (включающем как выражения, так и несколько не-выраженческих операторов), то слово function будет интерпретировано как начало объявления функции, а не выражения функции. В таком случае скобки () в конце приведут к синтаксической ошибке, так как также недостает имени функции в данном примере. Используя +, мы преобразуем это в выражение функции, что делает имя необязательным и позволяет ссылаться на функцию, что делает скобки допустимыми.

+ — это лишь один из вариантов. Можно также использовать -, !, ~ или практически любой другой унарный оператор. Кроме того, можно использовать скобки (это более распространено, но не более или менее корректно синтаксически):

(function() { console.log("Foo!"); })();
// или
(function() { console.log("Foo!"); }());
0

Краткий ответ: это помогает избежать синтаксической ошибки, так как используется результат функции так или иначе.

Вы также можете указать движку, что вас не интересует возвращаемое значение, использовав оператор void:

void function() { console.log("Foo!"); }();

Конечно, использование фигурных скобок вокруг всего также выполняет эту задачу.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь