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輸出當前文件的目錄,及文件名

image-20221129104542795

  • 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

image-20221128221030251

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章