[英]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 內部,那么 IIFE 將保護和封閉它們並將它們與外部世界隔離。
例如,如果你有這個:
Visualizer = (function() {
var counter = 0;
function Visualizer() {
counter++;
...
}
Visualizer.prototype.getCount = function () { return counter; }
...
return Visualizer;
})();
var viz = new Visualizer();
然后,IIFE 將包含一個變量counter
,該counter
可用於 Visualizer 的所有實例的所有方法,但與外部世界隔離,IIFE 將提供一些潛在的好處。
如果有很多可視化工具,則function1在所有可視化工具中都是相同的實例。 如這里討論的, IIFE方法泄漏 。
抱歉,我措辭含糊,但我認為 JS 需要正確使用括號才能知道什么操作優先以及什么屬於什么,這相當於簡單地說“知道什么是什么”並說明 python 只是說如果它確實如此沒有這些括號,它會正確地求助於像 python 這樣不需要括號和的方法; 縮進很重要的地方。 可能我錯過了整個問題,但我認為我是對的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.