khellang/iffe.md

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:

Vastaa

Sähköpostiosoitettasi ei julkaista.