什麼是命名空間?

命名空間是將一組實體、變量、函數、對象包裝在單一的總體下的行為。

JavaScript 有多種方式來實現命名空間,通過看例子可以更容易地理解這個概念。

創建命名空間的最簡單方式是通過創建一個物件文字:

const car = {
  start: () => {
    console.log('start');
  },
  stop: () => {
    console.log('stop');
  }
};

這樣,start 和 stop 就被命名為 car 的子集:car.start()car.stop()

它們不會汙染全局物件

為什麼這很重要?一個好的理由是沒有任何東西能干擾它們。

這種方式還可以在對象創建後將變量分配給該對象:

const car = {};

car.start = () => {
  console.log('start');
};

car.stop = () => {
  console.log('stop');
};

但是它們仍然可以從外部訪問,這要歸功於 car 對象引用。

從外部完全隱藏此代碼的最佳方法是將其包裹在一個區塊中,這是一段用花括號包裹的代碼,就像 iffor 區塊一樣,但也可以形成獨立的區塊,像這樣:

{
  const start = () => {
    console.log('start');
  };

  const stop = () => {
    console.log('stop');
  };
}

現在這兩個函數在區塊外是無法訪問的。

但是,你需要注意總是使用 letconst,它們是區塊作用域的。

如果使用 var 的話,它就會“泄露”到區塊外。

為了解決這個問題,你可以使用函數,這是“舊的”、在 let/const 出現之前的方法:

(function() {
  var start = () => {
    console.log('start');
  };

  const stop = () => {
    console.log('stop');
  };
})();

現在 startstop 都無法從外部訪問,即使 start 被分配給使用 var 定義的變量。