簡體   English   中英

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 內部,那么 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM