JavaScript: Знак плюс перед функциональным выражением
Я ищу информацию о немедленно вызываемых функциях и наткнулся на следующую запись:
+function(){console.log("Something.")}()
Может ли кто-нибудь объяснить, что означает знак +
перед функцией и какую роль он выполняет?
2 ответ(ов)
Для того чтобы парсер воспринимал часть кода после +
как выражение, его необходимо использовать. Это обычно применяют для немедленно вызываемых функций, например:
+function() { console.log("Foo!"); }();
Если +
не будет, и парсер окажется в состоянии, ожидающем оператор, (включающем как выражения, так и несколько не-выраженческих операторов), то слово function
будет интерпретировано как начало объявления функции, а не выражения функции. В таком случае скобки ()
в конце приведут к синтаксической ошибке, так как также недостает имени функции в данном примере. Используя +
, мы преобразуем это в выражение функции, что делает имя необязательным и позволяет ссылаться на функцию, что делает скобки допустимыми.
+
— это лишь один из вариантов. Можно также использовать -
, !
, ~
или практически любой другой унарный оператор. Кроме того, можно использовать скобки (это более распространено, но не более или менее корректно синтаксически):
(function() { console.log("Foo!"); })();
// или
(function() { console.log("Foo!"); }());
Краткий ответ: это помогает избежать синтаксической ошибки, так как используется результат функции так или иначе.
Вы также можете указать движку, что вас не интересует возвращаемое значение, использовав оператор void
:
void function() { console.log("Foo!"); }();
Конечно, использование фигурных скобок вокруг всего также выполняет эту задачу.
Сравнение: var functionName = function() {} против function functionName() {}
Установка значения по умолчанию для параметра функции в JavaScript
В чем разница между call и apply?
Существует ли оператор "объединения с нулем" в JavaScript?
Что такое конструкция (function() { } )() в JavaScript?