Javascript为什么要在IIFE中包装变量或构造函数?
我今天看到了这样的东西Javascript为什么要在IIFE中包装变量或构造函数?,javascript,iife,Javascript,Iife,我今天看到了这样的东西 var Visualizer = (function() { function Visualizer() { //... } Visualizer.prototype.function1 = function () { /* ... */ } //... return Visualizer; })(); var viz = new Visualizer(); 我不明白这和扔掉生命包装有什么区别 这里显示的特定构造没有意义
var Visualizer = (function() {
function Visualizer() {
//...
}
Visualizer.prototype.function1 = function () { /* ... */ }
//...
return Visualizer;
})();
var viz = new Visualizer();
我不明白这和扔掉生命包装有什么区别 这里显示的特定构造没有意义。在这种类型的构造中使用IIFE的原因是当您有需要声明的静态数据,希望对象可用,但不希望它公开访问或干扰全局命名空间或成为实例数据时 由于您显示的代码没有显示任何这些,因此它并没有像您所显示的那样提供任何好处。但是,如果在对象外部,但在IIFE内部声明了一些其他变量,那么IIFE将保护和封闭它们,并将它们与外部世界隔离 例如,如果您有:
Visualizer = (function() {
var counter = 0;
function Visualizer() {
counter++;
...
}
Visualizer.prototype.getCount = function () { return counter; }
...
return Visualizer;
})();
var viz = new Visualizer();
然后,IIFE将包含一个变量
计数器
,可用于Visualizer所有实例的所有方法,但与外部世界隔离,IIFE将提供一些潜在的好处。对不起,我含糊其辞,但我认为JS说的话需要正确地用括号括起来,以知道什么操作具有优先权,什么属于什么,这相当于简单地说“知道什么在什么中”,并说明python只是说,如果它没有这些括号,它将正确地求助于python这样的方法,其中不需要括号和括号;压痕很重要的地方。可能我错过了整个问题,但我想我大概答对了 在这种情况下没有什么好处,但是如果你需要一些帮助函数呢?这是有用的,因为您将它们保持为私有,并且不会泄漏到全局范围。例如,将助手函数放在包装器中而不是函数中?将它们放在函数中有什么区别?如果这样做,则每次调用new
时都会创建帮助函数。它允许创建作用域变量,某些变量可能仅在函数中可用,但在全局作用域中不可用。