Самовыполняющиеся функции (Модуль)

Еще такую функцию называют - Выражение немедленно вызывающейся функции (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 как функцию!

results matching ""

    No results matching ""