Jos et välitä IIFE:n paluuarvosta, se voi olla mikä tahansa seuraavista:
!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN
Tutkiskellaan tätä hieman lisää.
Kumpikin toimii samalla tavalla. Mielenkiintoiseksi homma alkaa muuttua, kun jommastakummasta moduulista puuttuu perässä oleva puolipiste:
Puuttuvan puolipisteen avulla kukin parenssijoukko yrittää kutsua välittömästi edeltävää lauseketta. Se olisi edellisen IIFE:n paluuarvo.
Ero on siis siinä, kun TypeError tapahtuu. Tarkistetaan, mitä argumentit tekevät. Huomaa, että console.log()
palauttaa undefined:
Tehdään nyt sama esimerkki crockfordin tavalla:
Mutta hetkinen, tässä ei ole TypeErroria…
Ei ole TypeErroria palautetun funktion takia. Palautettua funktiota, joka kirjaa argumentit, kutsutaan sitten moduuli2:n paluuarvolla, joka on määrittelemätön.Tämän ymmärryksen myötä palataan takaisin alkuperäiseen esimerkkiin, jossa oli TypeError:
Johtopäätös
Puuttuvan puolipisteen tilanteessa (function{})();
ja (function(){}());
IIFE:t voivat toimia eri tavalla.
Käytä linteriä tai jotain työkalua varmistaaksesi, että moduuleista ei puutu perässä olevia puolipisteitä, kun työskentelet moduulien parissa.
Erityisen varmuuden vuoksi lisää IIFE:hen johtava puolipiste: