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 || {});