Я понимаю зачем нужен модуль и вобще зачем нужна инкапсуляция. Однако никак не могу понять чем обусловлен его синтаксис (function(){ код })()
.
Откуда берутся и что делают скобки вокруг функции?
Зачем и как мы вызываем анонимную функцию (как я понимаю именно это делают круглые скобки сразу после {})?
Почему при создании библиотек (например для jQuery) мы пишем (function(){ код })(jQuery)
?
IIFE можно вызвать разными способами.
Сложилось так, что обычно IIFE обёртывают в скобки; это необходимо чтобы явно дать понять синтаксическому анализатору что тут будет выражение, а не объявление функции.
Иначе, встретив function
, начнётся разбор объявления:
(function () { /* ... */ })();
(function () { /* ... */ }());
(() => { /* ... */ })(); // В стрелочных функциях скобки разрешены только снаружи
Хотя скобки не обязательны, эти варианты так же работают:
!function () { /* ... */ }();
~function () { /* ... */ }();
-function () { /* ... */ }();
+function () { /* ... */ }();
void function () { /* ... */ }();
Если из контекста ясно что тут должно быть именно выражение, явно указывать уже не требуется:
var f = function () { /* ... */ }();
true && function () { /* ... */ }();
0, function () { /* ... */ }();
Wiki
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Хочу сделать что-то вроде фильтра, однако не с сортировкой блоков, а именно вставкой данных из массиваТо есть, изначально блок
I have situation where I need to create file uploading using Cloudinary I need to disabled file resizeing and set custom height and weight
Столкнулся со следующей проблемой при работе с Google visualization
Как можно из-под Linux (debian) управлять вводом-выводом через LPT порт используя NodeJS?