Скобки у модуля

188
16 мая 2018, 11:30

Я понимаю зачем нужен модуль и вобще зачем нужна инкапсуляция. Однако никак не могу понять чем обусловлен его синтаксис (function(){ код })().

Откуда берутся и что делают скобки вокруг функции?

Зачем и как мы вызываем анонимную функцию (как я понимаю именно это делают круглые скобки сразу после {})?

Почему при создании библиотек (например для jQuery) мы пишем (function(){ код })(jQuery)?

Answer 1

IIFE можно вызвать разными способами.
Сложилось так, что обычно IIFE обёртывают в скобки; это необходимо чтобы явно дать понять синтаксическому анализатору что тут будет выражение, а не объявление функции.
Иначе, встретив function, начнётся разбор объявления:

(function () { /* ... */ })();
(function () { /* ... */ }());
(() => { /* ... */ })(); // В стрелочных функциях скобки разрешены только снаружи

Хотя скобки не обязательны, эти варианты так же работают:

!function () { /* ... */ }();
~function () { /* ... */ }();
-function () { /* ... */ }();
+function () { /* ... */ }();
void function () { /* ... */ }();

Если из контекста ясно что тут должно быть именно выражение, явно указывать уже не требуется:

var f = function () { /* ... */ }();
true && function () { /* ... */ }();
0, function () { /* ... */ }();

Wiki

READ ALSO
Фильтр выдающий результаты из массива

Фильтр выдающий результаты из массива

Хочу сделать что-то вроде фильтра, однако не с сортировкой блоков, а именно вставкой данных из массиваТо есть, изначально блок

297
Cloudinary Uploading Img [требует правки]

Cloudinary Uploading Img [требует правки]

I have situation where I need to create file uploading using Cloudinary I need to disabled file resizeing and set custom height and weight

219
Google Visualization представить линию в виде точек

Google Visualization представить линию в виде точек

Столкнулся со следующей проблемой при работе с Google visualization

247
Управление LPT портом в NodeJS

Управление LPT портом в NodeJS

Как можно из-под Linux (debian) управлять вводом-выводом через LPT порт используя NodeJS?

228