Обычная функция объявления выглядит следующим образом:
function FuncName() { doSomething(); }
Тогда вы можете вызвать эту функцию следующим образом:
FuncName();
Анонимные функции очень похожи:
var FuncName = function YouCanEvenPutANameHereAndItWillBeIgnored() { doSomething(); }
Если синтаксис для регулярных функций и анонимных функций одинаково, тогда как JS их отличает? Он выводит то, что вы подразумеваете под контекстом. Вот почему это мгновенно Вызывается функция Expression не будет работать:
function(s) { console.log(s); } ('abc');
JS парсер читает слева.Строка начинается с function
, поэтому JS догадывается, что это регулярное объявление функции и ожидает, что оно закончится }
. Есть ('abc')
после функции, хотя, и JS выдает ошибку.
Чтобы исправить это, вы должны обмануть JS для разбора этой функции как анонимной функции. Для этого вам нужно сделать это частью выражения. Самый популярный способ заключается в следующем:
(function(s) { console.log(s); }) ('abc');
Есть и другие способы. Они менее читаемы, но они тоже работают.
(function(s) { console.log(s); } ('abc'));
+function(s) { console.log(s); } ('abc');
-function(s) { console.log(s); } ('abc');
1 * function(s) { console.log(s); } ('abc');
В вашем случае функция уже является частью выражения, поэтому нет необходимости добавлять круглые скобки.
Обратите внимание, что существуют другие способы заставить функцию быть выражением. Например: '! Function() {}()' или '0/function() {}()' или моя любимая '-функция() {}()' – slebetman
Также см. [Почему скобки необходимы] (http : //stackoverflow.com/q/1634268/1048572) в других местах. – Bergi