JavaScript Expressions de fonction immédiatement invoquées

Exemple

Parfois, vous ne voulez pas que votre fonction soit accessible / stockée en tant que variable. Vous pouvez créer une expression de fonction appelée immédiatement (IIFE en abrégé). Ce sont essentiellement des fonctions anonymes auto-exécutables . Ils ont accès à la portée environnante, mais la fonction elle-même et toutes les variables internes seront inaccessibles de l'extérieur. Une chose importante à noter à propos d'IIFE est que même si vous nommez votre fonction, les fonctions standard ne sont pas hissées comme les fonctions standard sont et ne peuvent pas être appelées par le nom de la fonction avec laquelle elles sont déclarées.

(function() {
   alert("I've run - but can't be run again because I'm immediately invoked at runtime,
          leaving behind only the result I generate");
}());

Ceci est une autre façon d'écrire l'IIFE. Notez que la parenthèse fermante avant le point-virgule a été déplacée et placée juste après le crochet:

(function() {
   alert("This is IIFE too.");
})();

Vous pouvez facilement transmettre des paramètres dans un IIFE:

(function(message) {
   alert(message);
}("Hello World!"));

En outre, vous pouvez renvoyer des valeurs à la portée environnante:

var example = (function() {
   return 42;
}());
console.log(example); // => 42

Si nécessaire, il est possible de nommer un IIFE. Bien que moins souvent vu, ce modèle présente plusieurs avantages, comme fournir une référence qui peut être utilisée pour une récursivité et rendre le débogage plus simple, car le nom est inclus dans la pile d'appels.

(function namedIIFE() { 
    throw error; // We can now see the error thrown in 'namedIIFE()'
}());

Bien que l’encapsulation d’une fonction entre parenthèses soit la manière la plus courante de désigner le parseur Javascript comme s’attendant à une expression, dans les endroits où une expression est déjà attendue, la notation peut être plus concise:

var a = function() { return 42 }();
console.log(a)  // => 42

Version flèche de la fonction immédiatement invoquée:

6
(() => console.log("Hello!"))(); // => Hello!