?對于一個模塊而言,有兩個關鍵的地方,一是有自己的作用域,二是有對外暴露的接口
不知道大家有沒有想過這樣一個問題,模塊是怎么實現上面兩個特性的呢?其實通過一個?立即執行函數?就可以了
實際上 Node 在編譯的時候,會在我們寫的代碼外包上一層立即執行函數,并傳入一些必須的參數
-
exports
:用于導出模塊數據,module.exports
?的一個引用 -
require
:用于導入其它模塊 -
module
:包含當前模塊的基本信息 -
__filename
:當前模塊的絕對路徑 -
__dirname
:當前模塊所在目錄的絕對路徑
(function (exports, require, module, __filename, __dirname) {/* 我們寫的代碼 */
})()
我們上面使用的?require
、exports
?都是在編譯時傳入的,我們可以把傳入的參數打印出來看一下
// 打印
console.log(__filename)
console.log(__dirname)
console.log(exports)
console.log(module)
console.log(require)