khellang/iffe.md

Si vous ne vous souciez pas de la valeur de retour de l’IIFE, cela pourrait être l’une des suivantes :

!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN

Explorons cela un peu plus.

Les deux fonctionnent de la même façon. Cela commence à devenir intéressant lorsqu’il manque un point-virgule de fin à l’un des modules :

Avec un point-virgule manquant, chaque ensemble de parens essaie d’invoquer immédiatement l’expression précédente. Ce serait la valeur de retour de l’IIFE précédent.

Donc la différence est quand l’ErreurDeType se produit. Vérifions ce que les arguments sont en train de faire. Notez que console.log() renvoie undefined:

Maintenant faisons ce même exemple avec la méthode crockford:

Mais attendez, il n’y a pas de TypeError ici…

Il n’y a pas de TypeError à cause de la fonction retournée. La fonction retournée qui enregistre les arguments est alors invoquée avec la valeur de retour de module2, qui est indéfinie.Avec cette compréhension, revenons à l’exemple original, où il y avait une TypeError:

Conclusion

Les IIFE (function{})(); et (function(){}()); peuvent agir différemment dans la situation du point-virgule manquant.

Utilisez linter ou un outil pour vous assurer que les modules ne manquent pas de point-virgule de queue lorsque vous travaillez sur des modules.

Pour être encore plus sûr, ajoutez un point-virgule de tête au IIFE:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.