Я шукав інформацію про негайно викликані функції, і десь натрапив на це позначення:
+function(){console.log("Something.")}()
Чи може хтось пояснити мені, що +
означає / робить знак перед функцією?
Я шукав інформацію про негайно викликані функції, і десь натрапив на це позначення:
+function(){console.log("Something.")}()
Чи може хтось пояснити мені, що +
означає / робить знак перед функцією?
Відповіді:
Це змушує парсера ставитися до частини, що слідує за +
виразом,. Зазвичай це використовується для функцій, які викликаються негайно, наприклад:
+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"; })());
(+function() { ... })()
Позначення не можуть виконуватися без помилок ( за винятком того факту , що це не дає відповіді на питання).
3++function...
що це не те саме.
+function...
саме по собі це зайве. Такий же результат може бути, і blah + function( ){ ... }( );
це призведе до заперечення потреби в обгорткових дужках.
Отже, коротка відповідь полягає в тому, що вона запобігає синтаксичній помилці, використовуючи функцію результатів так чи інакше.
Ви також можете доручити двигуну, що вас навіть не цікавить повернене значення, скориставшись void
оператором:
void function() { console.log("Foo!"); }();
Звичайно, поставлення брекетів навколо всієї речі також служить цій цілі.