Javascript为什么在IIFE中包含变量或构造函数?
问题描述:
我看到这样的事情今天Javascript为什么在IIFE中包含变量或构造函数?
var Visualizer = (function() {
function Visualizer() {
...
}
Vizualizer.prototype.function1 = function() { ... }
...
return Visualizer;
})();
var viz = new Visualizer();
我不明白这一点对刚刚摆脱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
这将是提供给展台的所有实例的所有方法,但来自外界的隔绝IIFE将提供一些潜在的好处。
+0
真的很酷的解释 – natecraft1
答
对不起,我含糊其词,但我认为用言语表达JS需要正确括号以知道什么操作优先,什么属于相当于简单地说“知道什么是什么”,并指出蟒蛇只是说如果它没有这些括号,它会适当地采用像python这样的方法,而不需要括号;缩进很重要。可能我错过了整个问题,但我认为我是对的。
那么,在这种情况下没有太大的好处,但如果你需要一些辅助函数呢?那是什么时候它很有用,因为你把它们保密,并且不会泄漏到全球范围。 – elclanrs
就像把辅助函数放在包装中而不是函数中一样?将它们放入函数之间有什么区别? – natecraft1
如果你这样做,你每次调用'new'时都会创建帮助函数。 – elclanrs