Node.js中require()單例

我剛接觸Node.js沒多久,對於其中的一些知識還不是很瞭解。例如在使用require()方法來家載模塊時,我就很好奇模塊中的對象是一種怎樣的狀態,是每次調用require()的時候裏面的對象要從新new,仍是隻new一次,每次require()的時候拿到的對象都是相同的。後來查看一些資料才發現,require()相同模塊(相同路徑,大小寫敏感)獲得的模塊中的對象都是單例的。在require()首次加栽的時候,Node爲其生成一個鍵,而後將其寫入緩存,後面再使用require()的時就會從緩存中去找,若是存在,就直接返回緩存中的模塊。那麼下面就用一個小例子來驗證一下。node

1. 編寫object1.js緩存

let value = 0

function set(input) {
    value = input
}

function get() {
    return value
}

exports.set = set
exports.get = get

2.編寫測試代碼test.js測試

const object1 = require('./object1.js')
const object2 = require('./object1.js')

object1.set(1)
object1.set(2)

console.log(object1.get())
object2.set(5)
console.log(object1.get())

3. 命令行輸入ui

node test.js

獲得結果spa

2
5

能夠看出object1和object2都是require的相同模塊,改變object2中的變量值,object1中的值也跟着改變了,說明他們指向的是同一個對象。咱們能夠利用這種機制,設置一些全局的對象,就不要使用Node.js中的一些全局對象,便於代碼維護。命令行

以上就是我對Node.js中require()機制的理解,但願能夠幫到你們!code

相關文章
相關標籤/搜索