IIFE albo po prostu iffy jest to funkcja samowykonująca się w JavaScript. Na pewno nie raz na nią natrafiliście albo nawet sami ją pisaliście:

(function() {
    'use strict';  

}());

Prosta sprawa. Nic dodać nic ująć.

Jest ona o tyle fajna, że w niej można zawrzeć dyrektywę 'use strict'; która znacząco poprawi jakość naszego kodu w JS – przynajmniej poprawi na tyle na ile będzie mogła ;)

Nie zależnie od tego, natrafiłem dzisiaj na coś co mi się bardzo nie spodobało. Szablon funkcji IIFE stworzony przez John Papa.

Dlaczego ten szablon mi się nie podoba?

  • Używa globalnego 'use strict'; co powoduje, że wszystkie pliki będą analizowane przez przeglądarkę, a to nie jest dobre w szczególności kiedy pracujemy z legacy code do tego może nastąpić problem z łączeniem plików – w sensie połącz i z minimizuj.
  • Szablon zakłada, że tylko jeden plik będzie korzystał z danego modułu. Założenie może i prawdziwe, ale nie zawsze. Lepiej się przed tym zabezpieczyć.
  • Szablon niby pusty a kurcze ma tyle zbędnego kodu, z miejsca bym wszystko z tego wywalił.

Zresztą na tyle mnie to zirytowało, że zrobiłem pull request modyfikując iife by było to plain simple plus dodając loose augmentation iffe – lepsza wersja modułowości niż istniejący przykład.

Czyli plain simple powinien wyglądać tak:

(function (undefined) {

    'use strict';

})();

Zaś ten z modułem (prosty ale z modułem) tak:

var m = (function (module, undefined) {
    
    'use strict';
    
    return module;

})(m || {});