Почему скобки используются для переноса вызова функции javascript?

В чем разница между этими двумя вызовами функции javascript?

(function(){alert("foo")})() 

Против этого:

 (function(){alert("foo")}()) 

  • Как повернуть вектор Three.js вокруг оси?
  • Автофокус не работает на Firefox и не работает при выходе с другой страницы
  • Изменить фоновое изображение в теле
  • Как мне получить доступ к результатам предыдущих обещаний в цепочке .then ()?
  • Распечатайте действительный, неэкранированный JSON в представлении с Rails
  • Что такое метод AngularJS для создания глобальных сочетаний клавиш?
  • Булевы проверки в шаблонах подчеркивания
  • Как вы обнаруживаете между пользовательским агентом Desktop и Mobile Chrome?
  • 2 Solutions collect form web for “Почему скобки используются для переноса вызова функции javascript?”

    Это делается для удобства чтения.

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

    Вот что делает каждый из ваших фрагментов:

    В первом из ваших двух фрагментов первая скобка будет оцениваться как значение закрытой функции. Тогда это значение будет вызываться как функция. Таким образом, в конечном счете функция будет выполнена, что, вероятно, вас волнует.

    Во втором фрагменте внешняя скобка будет оцениваться как содержащая функцию, которая объявляется встроенной и немедленно выполняется. Опять же, функция будет выполнена, что, вероятно, будет тем, о чем вы заботитесь.

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

    Разница между фрагментом, подобным вашему, и простым объявлением функции:

    Функции, которые вы указали, также идентичны следующим. Я только что добавил имя функции и присвоил возвращаемое значение для синтаксической точности, на которую вы можете сейчас игнорировать.

     // javascript... var val = function myFooFunc () { alert("foo"); }(); 

    Однако это было бы легко ошибочно принять за простую декларацию функции, которая отличается:

     // javascript... function myFooFunc () { alert("foo"); } 

    Обратите внимание, что единственная реальная разница в том, что это последнее объявление функции не выполняется немедленно. Остальные. Так что это совсем другое поведение (простое объявление может быть выполнено позже, если оно вызывается по имени или оно вообще не может выполняться). Часто бывает трудно увидеть эту разницу в синтаксисе сразу, особенно если тело функции растет очень долго и требует прокрутки на экране.

    Почему функции выполняются немедленно?

    Когда функция сразу же выполняется после ее объявления, значение часто возвращается к чему-то (это может быть часть задания присваивания). Иногда функция выполняется сразу, потому что она содержит внутренние функции и используется для обеспечения функционального охвата закрытых операторов.

    По сути, люди закрывают скобки вокруг формы «сразу же» (оба ваших фрагмента и первого из моих двух), чтобы дать визуальную подсказку другим разработчикам, что функция вызывается немедленно. Это просто читать, потому что вы можете не зацепить скобки до тех пор, пока не дойдете до конца функции (или не заметите их вообще).

    У них обоих одинаковое поведение.

    Скобки, инкапсулирующие объявление функции, указывают механизму JavaScript на выполнение кода сразу после его анализа. В первом примере вы создаете объект функции, а затем вызываете его с круглыми скобками. Во втором примере вы сообщаете движку JavaScript создать объект функции и немедленно вызвать его.

    Пример:

     // creates a function object var f1 = (function() { alert('foo'); }); // creates a function object and executes it immediately var f2 = (function() { alert('foo'); }()); 

    Разница в том, что f1 дает вам объект функции. F2 создает и вызывает анонимную функцию.

    JavaScript делает сайт умным, красочным и простым использованием.