Node.js 的模块作用域和 module 对象详细介绍

embedded/2025/3/16 15:11:15/

目录

 

代码示例

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)

javascript">// 定义私有变量和方法(外部无法访问)
const privateVar = "我是一个私有变量";function privateFunction() {return "我是一个私有函数";
}// 定义可供外部访问的变量和方法
const publicVar = "我是一个可以被外部访问的变量";function publicFunction() {return "我是一个可以被外部访问的函数";
}// 使用 module.exports 导出
module.exports = {publicVar,publicFunction
};

2. 导入模块并使用 module-demo.js

(文件名: index.js,文件类型: JavaScript)

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 后,终端会输出以下内容:

我是一个可以被外部访问的变量
我是一个可以被外部访问的函数

privateVarprivateFunction() 是无法在外部访问的,因为它们被定义在模块内部,未通过 module.exports 进行导出。


总结

  1. 模块作用域

    • Node.js 中,每个 JavaScript 文件都是一个独立的模块,不会污染全局作用域。
    • 模块内部定义的变量和方法默认是私有的,外部无法直接访问。
  2. module 对象

    • module.exports 用于导出模块中的变量、函数或对象,使其可以在其他文件中使用。
    • 只有被 module.exports 导出的内容,才能被 require() 访问,其他未导出的内容依然保持私有作用域。

掌握模块作用域和 module 对象的使用方式,对于构建结构清晰、易维护的 Node.js 项目至关重要。

 


http://www.ppmy.cn/embedded/173089.html

相关文章

leetcode top100矩阵题73.54.48.240

73. 矩阵置零 class Solution {public void setZeroes(int[][] matrix) {int line matrix.length;int col matrix[0].length;List<Integer> changeLines new ArrayList<Integer>();List<Integer> changeCols new ArrayList<Integer>();for(int i …

Python数据分析之数据可视化

Python 数据分析重点知识点 本系列不同其他的知识点讲解&#xff0c;力求通过例子让新同学学习用法&#xff0c;帮助老同学快速回忆知识点 可视化系列&#xff1a; Python基础数据分析工具数据处理与分析数据可视化机器学习基础 四、数据可视化 图表类型与选择 根据数据特…

Html5记忆翻牌游戏开发经验分享

H5记忆翻牌游戏开发经验分享 这里写目录标题 H5记忆翻牌游戏开发经验分享前言项目概述技术要点解析1. 页面布局&#xff08;HTML CSS&#xff09;响应式设计 2. 翻牌动画效果3. 游戏逻辑实现状态管理卡片配对检测 开发技巧总结1. 模块化设计2. 性能优化3. 用户体验 踩坑经验扩…

蓝桥杯嵌入式赛道复习笔记1(led点亮)

前言 基础的文件创建&#xff0c;参赛资源代码的导入&#xff0c;我就不说了&#xff0c;直接说CubeMX的配置以及代码逻辑思路的书写&#xff0c;在此我也预祝大家人人拿国奖 理论讲解 原理图简介 1.由于存在PC8引脚到PC15引脚存在冲突&#xff0c;那么官方硬件给的解决方案…

Web元件库 ElementUI元件库+后台模板页面(支持Axure9、10、11)

Axure是一款非常强大的原型设计工具&#xff0c;它允许设计师和开发者快速创建高保真原型&#xff0c;以展示应用或网站的设计和功能。通过引入各种元件库&#xff0c;如ElementUI元件库&#xff0c;可以极大地丰富Axure的原型设计能力&#xff0c;使其更加贴近实际开发中的UI组…

AI绘画笔记--基础知识

一.什么是AI绘画 AI绘画或者说AI生图&#xff0c;本质上来说还是图像生成技术&#xff0c;是一种基于深度学习的人工智能技术&#xff0c;通过提前大量学习学习图像特征&#xff0c;生成符合提示词的新图像。 整个流程可以简化理解为&#xff1a;人们首先让深度学习模型读取大量…

硬件与软件的边界-从单片机到linux的问答详解

--- # 硬件与软件的边界——从单片机到 Linux 设备驱动的问答详解 在嵌入式开发和操作系统领域&#xff0c;经常会有人问&#xff1a; **“如果一个设备里没有任何代码&#xff0c;硬件是不是依然会工作&#xff1f;例如&#xff0c;数据收发、寄存器数据存储、甚至中断触发…

Redis设计与实现-数据持久化

数据持久化 1、RDB持久化1.1 RDB文件的创建和载入1.2 自动间隔保存1.3 RDB文件结构 2、AOF持久化2.1 AOF写入2.2 AOF载入2.3 AOF重写 如有侵权&#xff0c;请联系&#xff5e; 如有错误&#xff0c;也欢迎批评指正&#xff5e; 本篇文章大部分是来自学习《Redis设计与实现》的笔…