目錄
?
代碼示例
1. 創建模塊文件 module-demo.js
2. 導入模塊并使用 module-demo.js
運行結果
總結
?
在 Node.js 中,每個文件都是一個獨立的模塊,具有自己的作用域。與瀏覽器 JavaScript 代碼不同,Node.js 采用模塊作用域,這意味著一個文件中的變量、函數、類等不會污染全局作用域,而是僅在該模塊內部有效。這種設計提高了代碼的封裝性和安全性。
module 對象 是 Node.js 提供的一個全局對象,專門用于管理模塊的信息和導出功能。module
對象中包含 exports
屬性,它用于導出模塊的內容,以便其他文件可以使用 require()
進行導入。
代碼示例
下面的示例展示了 Node.js 模塊的作用域規則,以及如何使用 module
對象導出和導入數據。
1. 創建模塊文件 module-demo.js
(文件名: module-demo.js,文件類型: JavaScript)
// 定義私有變量和方法(外部無法訪問)
const privateVar = "我是一個私有變量";function privateFunction() {return "我是一個私有函數";
}// 定義可供外部訪問的變量和方法
const publicVar = "我是一個可以被外部訪問的變量";function publicFunction() {return "我是一個可以被外部訪問的函數";
}// 使用 module.exports 導出
module.exports = {publicVar,publicFunction
};
2. 導入模塊并使用 module-demo.js
(文件名: index.js
,文件類型: JavaScript)
// 使用 require() 導入自定義模塊
const myModule = require('./module-demo');console.log(myModule.publicVar); // 輸出: 我是一個可以被外部訪問的變量
console.log(myModule.publicFunction()); // 輸出: 我是一個可以被外部訪問的函數// 嘗試訪問私有變量(會報錯)
// console.log(myModule.privateVar); // undefined
// console.log(myModule.privateFunction()); // TypeError: myModule.privateFunction is not a function
運行結果
執行 node index.js
后,終端會輸出以下內容:
我是一個可以被外部訪問的變量
我是一個可以被外部訪問的函數
而 privateVar
和 privateFunction()
是無法在外部訪問的,因為它們被定義在模塊內部,未通過 module.exports
進行導出。
總結
-
模塊作用域
- Node.js 中,每個 JavaScript 文件都是一個獨立的模塊,不會污染全局作用域。
- 模塊內部定義的變量和方法默認是私有的,外部無法直接訪問。
-
module 對象
module.exports
用于導出模塊中的變量、函數或對象,使其可以在其他文件中使用。- 只有被
module.exports
導出的內容,才能被require()
訪問,其他未導出的內容依然保持私有作用域。
掌握模塊作用域和 module
對象的使用方式,對于構建結構清晰、易維護的 Node.js 項目至關重要。
?