Что такое конструкция (function () {}) () в JavaScript? - PullRequest
708 голосов
/ 22 ноября 2011

Раньше я знал, что это значит, но сейчас я борюсь ...

Это в основном говорит document.onload?

(function () {

})();

Ответы [ 23 ]

0 голосов
/ 22 ноября 2017

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

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

Очень круто.

0 голосов
/ 22 июля 2017

Выражение функции, вызываемой немедленно (IIFE), - это функция, которая выполняется сразу после ее создания. Он не связан с какими-либо событиями или асинхронным выполнением. Вы можете определить IIFE, как показано ниже:

(function() {
     // all your code here
     // ...
})();

Первая пара скобок function () {...} преобразует код внутри скобок в выражение. Вторая пара скобок вызывает функцию, являющуюся результатом выражения.

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

0 голосов
/ 01 марта 2016

Я думаю, что 2 набора скобок немного сбивают с толку, но я видел другое использование в примере с Google, они использовали что-то похожее, надеюсь, это поможет вам лучше понять:

var app = window.app || (window.app = {});
console.log(app);
console.log(window.app);

, поэтому, если windows.app не определено, то window.app = {} выполняется немедленно, поэтому window.app присваивается {} во время оценки состояния, поэтому результат как app, так и window.app теперь становится {}, поэтому вывод консоли:

Object {}
Object {}
...