我今天看到这样的事情

var Visualizer = (function() {
    function Visualizer() {
    //...
    }
    Visualizer.prototype.function1 = function () { /* ... */ }
    //...
    return Visualizer;
})();

var viz = new Visualizer();

我不了解这与摆脱Iife包装器有关的意义。

最佳答案

您在此处显示的特定构造没有意义。在这种类型的构造中使用IIFE的原因是,当您有需要声明的静态数据,想要对对象可用的静态数据但不希望其可公开访问或干扰全局命名空间或实例时,使用IIFE数据。

由于您显示的代码没有显示任何代码,因此它并没有像您显示的那样真正提供任何好处。但是,如果在对象外部但在IIFE内部声明了其他一些变量,则IIFE将对其进行保护和封装并将其与外界隔离。

例如,如果您有:

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

var viz = new Visualizer();

然后,IIFE将封装一个变量counter,该变量ojit_code可用于Visualizer的所有实例的所有方法,但与外界隔离,IIFE将提供一些潜在的好处。

关于Javascript为什么在IIFE中包装变量或构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22704987/

10-13 02:21