Самовыполняющиеся функции (Модуль)
Еще такую функцию называют - Выражение немедленно вызывающейся функции (IIFE)
(function(){
//to do something
})();
Эта форма записи функции называется самовыполняющейся функцией. Пустые скобки в конце говорят интерпретатору что этот код нужно выполнить немедленно. Эта техника позволяет инкапсулировать (скрыть) переменные и код, пряча их от глобального пространства имен чтобы они не вступили в конфликт с остальным кодом. По такой схеме пишутся библиотеки.
Скобки вокруг анонимной функции обязательны! Без скобок - интерпретатор увидет в основном потоке ключевое слово
function
и решит что это Function Declaration. Ниже ряд примеров как еще можно объявлять такие функции.
!function(){
alert('bingo!');
}();
+function(){
alert('bingo!');
}();
Вот упрощенный пример реализации библиотеки lodash:
;(function(){ // тут символ ; это защита от дураков, см.ниже
//lodash основная функция модуля
function lodash(value){
//to do something
};
//вспомогательная переменная
var version = '2.4.1';
//код функции size, пока доступна только внутри
function size(collection){
return Object.keys(collection).length;
};
//присвоим функцию size как свойство lodash
lodash.size = size;
//экспортируем lodash наружу из модуля
windows._ = lodash;
})();
Защита от дураков. Скорее всего все файлы js будут объеденнены в один с помощью минификатора. Поэтому если программист гдето написал не безопасный код - возникнет ощибка. Вот пример:
var a = 5 //забыл поставить ;
(function(){
...
})();
В результате этого кода - строки будут объеденены var a = 5()();
тоесть интерпретатор попытается вызвать число 5 как функцию!