目录
在 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 项目至关重要。