Javascript为什么在IIFE中包含变量或构造函数?

问题描述:

我看到这样的事情今天Javascript为什么在IIFE中包含变量或构造函数?

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

var viz = new Visualizer(); 

我不明白这一点对刚刚摆脱iife包装的。

+1

那么,在这种情况下没有太大的好处,但如果你需要一些辅助函数呢?那是什么时候它很有用,因为你把它们保密,并且不会泄漏到全球范围。 – elclanrs

+0

就像把辅助函数放在包装中而不是函数中一样?将它们放入函数之间有什么区别? – natecraft1

+1

如果你这样做,你每次调用'new'时都会创建帮助函数。 – elclanrs

您在这里展示的特定构造没有意义。在这种类型的结构中使用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这将是提供给展台的所有实例的所有方法,但来自外界的隔绝IIFE将提供一些潜在的好处。

+0

真的很酷的解释 – natecraft1

对不起,我含糊其词,但我认为用言语表达JS需要正确括号以知道什么操作优先,什么属于相当于简单地说“知道什么是什么”,并指出蟒蛇只是说如果它没有这些括号,它会适当地采用像python这样的方法,而不需要括号;缩进很重要。可能我错过了整个问题,但我认为我是对的。