1. 程式人生 > 其它 >node學習02--常見的全域性物件

node學習02--常見的全域性物件

一、常見的全域性物件

1.全域性物件的定義

  • 全域性物件(Global Object),它及其所有屬性都可以在程式的任何地方訪問,即全域性變數。
  • 在瀏覽器JavaScript中,通常window是全域性物件
  • 在Node.js中,全域性物件是global,所有的全域性物件都是global物件的屬性。

控制檯列印的global

<ref *1> Object [global] {
  global: [Circular *1],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  },
  queueMicrotask: [Function: queueMicrotask],
  performance: Performance {
    nodeTiming: PerformanceNodeTiming {
      name: 'node',
      entryType: 'node',
      startTime: 0,
      duration: 26.296499997377396,
      nodeStart: 0.5467000007629395,
      v8Start: 1.967500001192093,
      bootstrapComplete: 19.882200002670288,
      environment: 9.948199987411499,
      loopStart: -1,
      loopExit: -1,
      idleTime: 0
    },
    timeOrigin: 1669688619386.091
  },
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  }
}

2.特殊的全域性變數

  • __dirname 輸出當前目錄
  • __filename輸出當前檔案的目錄,及檔名
  • exports
  • module
  • require()

這些全域性物件實際上模組中的變數,只是每個模組都有,看起來像是全域性變數。

在命令列互動中是不可以使用的。

  1. setTimeout(cb, ms) 全域性函式在指定的毫秒(ms)數後執行指定函式(cb)。:setTimeout() 只執行一次指定函式。
  2. clearTimeout(t) 全域性函式用於停止一個之前通過 setTimeout() 建立的定時器。 引數 t 是通過 setTimeout() 函式建立的定時器。
  3. setInterval(cb, ms)
    全域性函式在指定的毫秒(ms)數後執行指定函式(cb),這個函式可以使用clearInterval()函式來清除。
  4. console:提供簡單的除錯控制檯,用於向標準輸出流(stdout)或標準錯誤流(stderr)輸出字元。
  5. process :process提供了Node程序中相關的資訊, 即 global 物件的屬性,用於描述當前Node.js 程序狀態的物件,提供了一個與作業系統的簡單介面。

二、模組化開發

1.CommonJS

CommonJS是一個規範,簡稱為CJS

  • NodeCommonJS在伺服器端一個具有代表性的實現,Node中對CommonJS進行了支援和實現,讓我們在開發node的過程中可以方便的進行模組化開發
  • Node中每一個js檔案都是一個單獨的模組;
  • 這個模組中包括CommonJS規範的核心變數:exportsmodule.exportsrequire
  • 我們可以使用這些變數來方便的進行模組化開發

模組化的核心是匯入和匯出

  • exports和module.exports可以負責對模組中的內容進行匯出
  • require函式可以幫助我們匯入其他模組(自定義模組、系統模組、第三方庫模組)中的內容

exports 和 module.exports 的使用

  • 如果要對外暴露屬性或方法,就用 exports 就行,要暴露物件(類似class,包含了很多屬性和方法),就用 module.exports
  • 不建議同時使用 exports 和 module.exports。
  • 如果先使用 exports 對外暴露屬性或方法,再使用 module.exports 暴露物件,會使得 exports 上暴露的屬性或者方法失效。

三、require細節

1.require('X')的查詢規範

情況一 像http fs這種內建模組,直接返回核心模組

情況二 X是以./或../開頭的。

  1. 如果有後綴名,按照字尾名的格式查詢對應的檔案;

  2. 如果沒有後綴名,

    1. 直接查詢檔案X
    2. 查詢X.js檔案
    3. 查詢X.json檔案
    4. 查詢X.node檔案
  3. 如果滅找到對應的檔案,將X作為一個目錄

    查詢目錄下的index檔案

    1. 查詢X/index.js檔案
    2. 查詢X/index.json檔案
    3. 查詢X/index.node檔案

情況三 在node_moudles資料夾中查詢

四、exports匯出方式

方式一

exports = {
    name:'mwf'
}
module.exports = exports

方式二

module.exports={
    name:'mwf'
}
exports = module.exports

最終目的都是讓他們兩個指向同一個物件

五、ES Module