Синтаксис для выполнения функции JavaScript

Это не дубликат Что представляет собой функция (function() {})() в JavaScript?

так как я прекрасно понимаю, что означает синтаксис: self executing function.

Зачем нужен этот синтаксис для самостоятельной выполнения функции:

(function() {
    alert('I don\'t have a name, I AM anonymous and I\'m autoexecuting myself');
}());

тогда как этот синтаксис не работает:

(function() {
    alert('I don\'t have a name, I AM anonymous and I\'m autoexecuting myself');
});

Ответ 1

Это потому, что ничего не выполняет функция. Обычно * это делается с помощью круглых скобок на конце. Контейнеры-скобки не являются тем, что делает его сразу вызываемой функцией. Пример:

var f = function() {
  console.log('Call f');
  return 1;
};

Это определяет функцию, которую вы позже можете вызвать, не так ли? Поэтому, чтобы вызвать его, вы должны:

f();

Теперь представьте себе следующее:

var f = function() {
  console.log('Call f');
  return 1;
}();

Поскольку вы вызывали функцию, f будет равно 1. Дополнительные скобки для скобок помогают читателю знать, что функция будет немедленно выполнена. Вот почему вы можете выполнить любое из следующих (и более):

function() {
  ...
}();

(function() {
  ...
}());

!function() {
  ...
}();

// This one seems to be the most common
(function() {
  ...
})();

Для будущей информации это фактически известно как оперативно вызываемое функциональное выражение или IIFE.

* Есть несколько исключений из этого правила. В частности, вы можете использовать new для функции, которая не принимает аргументов и может использовать геттеры и сеттеры для объектов. Подробнее см. этот вопрос.

Ответ 2

Так как для запуска нужно вызвать функции, и вы вызываете функцию с помощью ().

Ответ 3

(function(){ ... })() - вызов функции, где as (function() { ... }) - это выражение функции с круглыми скобками, которое не будет вызывать функцию, любым способом читайте это https://github.com/getify/You-Dont-Know-JS, вы не пожалеете!