Als je niet geeft om de retourwaarde van de IIFE, zou het een van de volgende kunnen zijn:
!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN
Laten we dit wat verder onderzoeken.
Beiden werken hetzelfde. Het wordt interessant als in een van de modules een puntkomma ontbreekt:
Met een ontbrekende puntkomma, probeert elke set parens de voorgaande expressie onmiddellijk op te roepen. Dat zou de terugkeerwaarde zijn van de voorafgaande IIFE.
Dus het verschil is wanneer de TypeError optreedt. Laten we eens kijken wat de argumenten inhouden. Merk op dat console.log()
ongedefinieerd retourneert:
Nu laten we datzelfde voorbeeld doen met de crockford-manier:
Maar wacht, er is hier geen TypeError…
Er is geen TypeError vanwege de geretourneerde functie. De geretourneerde functie die de argumenten logt, wordt dan aangeroepen met de return-waarde van module2, die ongedefinieerd is.Met dat begrip, laten we teruggaan naar het oorspronkelijke voorbeeld, waar er een TypeError was:
Conclusie
De (function{})();
en (function(){}());
IIFE’s kunnen verschillend handelen in de ontbrekende puntkomma situatie.
Gebruik linter of een tool om er zeker van te zijn dat er geen puntkomma’s achteraan ontbreken wanneer u aan modules werkt.
Om extra veilig te zijn voegt u een puntkomma voor aan de IIFE: