Javascript为什么要在IIFE中包装变量或构造函数?
Javascript why wrap a variable or constructor in an IIFE?
我今天看到了这样的东西
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将封闭一个变量counter
,该变量将对Visualizer的所有实例的所有方法可用,但与外部世界隔离,并且IIFE将提供一些潜在的好处。
对不起,我措辞含糊,但我认为JS说的话需要括号正确地知道什么操作需要优先级,什么属于什么相当于简单地说"知道什么是什么",并声明python只是说,如果它没有这些括号,它会适当地诉诸像python这样的方法,不需要括号和;缩进很重要。可能我没听懂整个问题,但我想我大概是对的。
相关文章:
- 构造函数函数闭包变量
- 正在向构造函数添加作用域变量
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 返回变量作为构造函数
- “var”变量,“this”变量和“global”变量 - 在JavaScript构造函数中
- JavaScript 构造函数中的“var”变量会发生什么
- 在 promise 中获取构造函数变量
- 是否需要初始化在 Javascript 中作为“类”构造函数参数传递的变量
- 在实例化期间使用构造函数变量
- 角度表达式无法使用构造函数属性分辨变量类型
- 使用类/构造函数与变量方法时的作用域不同
- 如何在嵌套原型中访问 JavaScript 构造函数变量
- 如何访问构造函数变量
- JavaScript:在构造函数中使用原型函数更改变量
- 从构造函数变量内部调用函数,在 JavaScript 中给出 Undefiend 错误
- 为什么我在构造函数中附加“this”的变量会失去其绑定
- 使用 JavaScript 和构造函数的动态变量名称:使用 EaselJS 将图像动态克隆到多个画布
- 如何使用在构造函数中创建的方法更新同一构造函数中的另一个变量
- Javascript-Prototype没有读取构造函数变量
- Javascript:将构造函数作为变量中的引用传递并调用此构造函数