Javascript pourquoi envelopper une variable ou un constructeur dans un IIFE?

J'ai vu quelque chose comme ça aujourd'hui

var Visualizer = (function() { function Visualizer() { ... } Vizualizer.prototype.function1 = function () { ... } ... return Visualizer; })(); var viz = new Visualizer(); 

Je ne comprends pas pourquoi je ne me débarrasser de l'enveloppe iife.

Il n'y a aucun intérêt pour la construction spécifique que vous montrez ici. La raison d'utiliser un IIFE dans ce type de construction est lorsque vous disposez de données statiques que vous devez déclarer, souhaitez être disponible pour votre objet, mais ne souhaitez pas qu'il soit accessible au public ou interfère avec l'espace de noms global ou l'instance Les données.

Étant donné que le code que vous montrez ne montre aucun de ceux-ci, il n'offre aucun avantage comme vous l'avez montré. Mais, s'il y avait d'autres variables déclarées en dehors de l'objet, mais à l'intérieur de l'IIFE, l'IIFE les protégeait et les enfermait et les isolait du monde extérieur.

Par exemple, si vous aviez ceci:

 Visualizer = (function() { var counter = 0; function Visualizer() { counter++; ... } Visualizer.prototype.getCount = function () { return counter; } ... return Visualizer; })(); var viz = new Visualizer(); 

Ensuite, l'IIFE comprendrait un counter variable qui serait disponible pour toutes les méthodes de toutes les instances de Visualizer, mais isolé du monde extérieur et l'IIFE offrirait un avantage potentiel.

Désolé, j'ai formulé un mot vaguement, mais je pense que JS a déclaré que les mots doivent être correctement adaptés pour savoir quelle opération prend la priorité et ce qui appartient à ce qui équivaut à dire «savoir ce qu'il y a dans quoi» et dire que Python disait simplement que s'il l'avait fait Ne pas avoir ces parenthèses, il devrait recourir à la méthode comme python où il n'y a pas besoin de crochets et; Où l'indentation est importante. Peut-être que j'ai manqué toute la question, mais je pense que je l'ai bien compris.