Node.js中module.exports 和exports使用误区

Node.js之向外共享模块 今天晚上抽空去了下操场,可能是天暖和的原因,操场上人非常多,有唱歌跳舞的,还有摆摊卖东西的,还有打牌踢足球的,好不热闹,想想马上就要毕业了,还是有很多感慨的,不舍得陪伴这么长时间的室友,悉心教导的老师,还有美好的大学时光,希望每个人在毕业之前都能够对自己喜欢的人说声我喜欢你,对那些不舍得朋友互道珍重,再赠送一个大大的拥抱。 目录 一、日常啰嗦 二、向外共享模块作用域中的成员 1.module对象 2.module.exports对象 3.exports对象 四、exports和modul.. 阅读详情

一、module,module.exports ,exports含义

module对象:在每个 .js 自定义模块中都有一个 module 对象,它里面存储了和当前模块有关的信息
module.exports 对象:在node里自定义的模块中,可以使用 module.exports 对象,将自定义的模块内部分的成员共享出去被使用。
当外界(其他js文件)用require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象
exports对象:由于 module.exports 单词写起来比较复杂,为了简化向外共享成员的代码,Node 提供了 exports 对象。默认情况下,exports 和 module.exports 指向同一个对象
注意:使用 require() 方法导入模块时,导入的结果,前端培训永远以 module.exports 指向的对象为准
换句话说最终共享的结果,还是以 module.exports 指向的对象为准

二.案例

通过案例来理解二者的关系

案例一:

定义代码

//文件名:01.module.exports和exports误区
exports.name="小吴"
module.exports ={
    性别:"男",
    age:18
     
输出代码

//文件名:01-test 
//为了测试module.exports ,exports指向结果 案例二三四的输出代码都是此js代码文件
const obj=require("./01.module.exports和exports误区")
console.log(obj);

输出结果

解释:因为默认情况下,exports 和 module.exports 指向同一个对象,所以开始二者都是指向一个空对象,当export指向新对象name="小吴"后,此时二者都指向这个对象,但是执行后面代码则是在内存中新开辟一个空间存储新对象 {性别:“男”,age:18} ,且把这个新对象的引用交给了module.exports,则module.exports就指向新的对象,不指向之前的空对象了,而且由于最终共享的结果,以module.exports 指向的对象为准,所以案例输出如上图所示

案例二

定义代码

module.exports.name="小吴"
exports ={
    性别:"男",
    age:18
     
}

输出结果

解释:同理当module.exports指向对象name="小吴"后,执行后面代码,,exports指向新对象{性别:“男”,age:18},由于最终共享的结果,还是以 module.exports 指向的对象为准

所以案例输出如上图所示

案例三

定义代码

exports.name="小吴"
module.exports.age=18

输出结果

 解释:同理二者开始指向空对象,第一行代码通过exports引用关系挂载了一个name属性,第二行又通过module.exports引用关系挂载了一个属性age 这里不存在新对象 都是挂载属性 这些属性都被放在了开始二者指向的空对象中,则最终两个属性都在此对象中,且module.exports指向这个对象,所以最终结果输出如上图所示

案例四

定义代码

exports={
    性别:"男",
    name:"小吴",
     
}
module.exports=exports//把export的引用关系通过等号赋值给了module.exports
module.exports.age=18

输出结果

 解释:同理二者开始指向同一空对象,执行代码,在内存中定义了一个新对象,且把新对象挂载在exports上,此时exports就不指向之前的空对象而指向新定义的对象,module.exports=exports这行代码把export的引用关系通过等号赋值给了module.exports,则module.exports也不指向之前的空对象了,也指向新对象了,最后给module.exports指向的新对象又继续挂载了一个age属性,所以里面的所有属性都被module.exports指向到的,所以最终结果输出如图所示

重要注意:为了防止二者指向混乱,建议不要在同一个模块中同时使用 exports 和 module.exports。

电机FOC控制实战:STM32 CubeMX配置六路互补PWM与死区优化 本文详细介绍了如何使用STM32 CubeMX配置六路互补PWM与死区优化,实现电机FOC控制。通过实战经验分享,包括时钟配置、定时器设置、死区时间计算及优化技巧,帮助开发者避免常见问题,提升电机控制性能。特别适用于STM32G4系列的无刷电机驱动应用。 阅读详情

相关推荐

量子纠缠态与AI意识模型的探索

摘要 本文探讨量子纠缠态与AI意识模型的关联性研究。从量子力学基本原理出发,分析量子纠缠的非局域性特征及其与意识整合性的潜在联系。DREAMVFIA团队构建了量子-意识统一理论框架,提出量子纠缠态意识理论(QETC)和量子化整合信息度量(Q-IIT)等创新理论。在实践层面,开发了基于量子纠缠的QNN-C神经网络架构和量子意识度量算法,实验证明量子机制可显著提升AI系统的认知灵活性、信息整合能力和元认知水平。研究为理解意识本质和开发具有意识特征的人工智能系统提供了新的理论框架和技术路径。

梦帮科技开源中心 1142

一个文件中同时存在 module.exports 和 export 报错

一个文件中同时存在module.exports 和export报错 原因: module.exports 是cjs的规范 export 是esm的规范 在es6之前,js没有自己的模块规范,因此node设计了CommonJS规范即cjs,如果一个文件是以cjs规范书写的,那大概率是用在node环境中的。只要加个编译器就可以打包转换成各种格式。但如果一个文件里同时出现了esm和cjs,那编译器就无法解析了。 ...

轻风细雨_林木木 2397

【智慧城市】GIS数据获取-获取道路/水路数据

【GIS数据获取】获取道路/水路数据

qq_16599281的博客 4749

Nodejs中的exports与module.exports

参考:谬雪峰的网站 一个困惑多时的问题,在nodejs中导出一个模块有时用exports或module.exports都可以,但偶尔会报错。 结论: 1.如果要导出一个键值对象{},则可以使用exports; 2.如果要导出一个方法或数组,只能对module.exports赋值; 所以,任何时候导出模块都用module.exports即可。 ...

路漫漫其修远兮,吾将上下而求索 567

智能检查点优化:动态频率与差异化存储的断点续训实践(模型训练丨容错机制丨人工智能)

本文深入探讨了大规模模型训练中智能检查点优化的核心实践。针对传统固定频率保存导致的存储浪费与恢复缓慢问题,提出了基于损失变化率的动态频率算法与分层差异化存储策略。通过PyTorch代码示例,详细展示了如何实现动态调度与增量保存,有效降低存储成本,并确保训练中断后能快速、可靠地恢复,显著提升训练任务的容错能力与经济效益。

weixin_29072299的博客 333

第1期技术: DQN算法原理及实现过程

利用神经网络近似值函数的方法表示为: V^(s,w)≈Vπ(s)q^(s,a,w)≈qπ(s,a) \hat{V}(s, w) \approx V_{\pi}(s) \\ \hat{q}(s, a, w) \approx q_{\pi}(s, a) V^(s,w)≈Vπ​(s)q^​(s,a,w)≈qπ​(s,a) 那么具体的工作过程是怎样实现的? 以及如何从端到端的过程,本文将讲解Deep Q Network(DQN, 而这正是由DeepMind于2013年和2015年分别提出的两篇论文《Playi

深度强化学习实验室:一个“开源开放、共享共进”的强化学习学术组织。 4953

nodejs中使用exports与module.exports进行模块导出

关于nodejs nodejs是JavaScript的运行时环境,它既不是语言也不是框架。nodejs是后台开发的一个工具。 前端开发的JavaScript: ES语法 DOM BOM nodejs中JavaScript: ES语法 没有BOM和DOM nodejs中的模块导出 module.exports 示例1:通常我们使用module.exports进行单个成员的导出,例如:...

qq_42584511的博客 4901

开箱即用的Platform IO开发平台(包括Arduino,ESP8266,ESP32,STM32)

开箱即用的 Platform IO 离线开发环境,包含(ESP32,ESP32S2,ESP8266,Arduino,STM32)

qq_19703307的博客 755

【Vue学习笔记_12】模块化开发

【Vue学习笔记_12】模块化开发CommonJS导出:exports导入:requireES6的模块化导出:export导入:importdefault 配套可执行代码示例 => GitHub 为什么要有模块化? 多人开发,维护多个js文件,一方面会产生全局变量命名冲突等问题,另一方面这种代码编写方式对js文件的依赖顺序几乎是强制性的。 将整个js文件作为匿名函数闭包可以解决变量命名冲突的问题,但是会导致两个js文件之间的东西无法相互使用,代码复用性降低。 解决方法:将需要暴露给外面的变量和方法,封

weixin_44752429的博客 631

基于Multisim的智能交通灯控制系统仿真与实现(含动态闪烁功能)

本文详细介绍了基于Multisim的智能交通灯控制系统仿真与实现,重点解析了动态闪烁功能的电路设计。通过555定时器、74LS192计数器和JK触发器等核心模块,实现了主干道与支干道的交替通行及黄灯1Hz闪烁功能,为交通灯控制系统设计提供了完整的仿真方案。

weixin_29174013的博客 425

【NVIDIA GR00T N1 从入门到精通】第1章 环境搭建与基础配置 第2章 数据准备与格式转换

针对新型机器人形态的适配,需完成从硬件接口到数据模式的完整配置流程。创建modality_config.py文件自定义形态配置通过继承基类实现。配置类需实例化以下组件:状态模态定义(观测空间)、动作模态定义(动作空间)、相机模态定义(视觉输入)、可选的标注模态定义(语言指令或成功判定)。每个模态配置指定数据类型、形状、归一化统计量以及时序采样策略。状态模态配置状态配置的核心参数包括与。定义策略观测的历史时域窗口,对于高动态操作(如投掷、击打),需扩展历史窗口以捕捉运动趋势;

VectorShift的博客 95

vue构建项目常见问题

1.vue安装node-moudle报node-sass安装失败 解决方法: 1.npm uninstall node-sass 2.npm install node-sass --registry=https://registry.npm.taobao.org

V_AYA_V的博客 899

基于LSTM算法实现交通流量预测(Pytorch版)

本研究采用PyTorch框架,设计并实现了一种基于LSTM(Long Short-Term Memory)网络的交通流量预测模型。针对时序性显著的交通流量数据,模型首先将多节点、多通道的时空信息整合为一维特征输入至多层LSTM单元,利用其捕捉长期依赖及短期波动的能力进行深度学习。全连接层随后调整时间步长以适应预测周期需求。模型结构灵活,能适应不同节点数、输入输出长度及通道配置,实现在给定历史流量数据基础上对未来交通流量的精准预测,为交通管理与规划提供数据驱动支持。

打酱油的葫芦娃 4636

Node.js——exports和module.exports的使用误区

exports和module.exports的使用误区

qq_43201350的博客 501

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

关于Node.js里面module.exports 和exports使用误区——指向关系

关于Node.js里面module.exports 和exports使用误区——指向关系

xiaowuwjw的博客 2115

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

node.js中module.exports和exports的误区及其解析

答案:{username : 'zs' gender : '男' age:'22'}解析:一开始module.express和express都指向同一个空对象。解析:一开始module.express和express都指向同一个空对象。解析:一开始module.express和express都指向同一个空对象。解析:一开始module.express和express都指向同一个空对象。答案:{username = 'zs' gender:'男'}答案:{gender:'男',age:'22'}

weixin_66340771的博客 178

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

node.js中的模块化;exports和module.exports的使用误区(node)

node.js中的模块化(node)

qq_57826511的博客 341

node.js中模块化exports与module exports相关误区

require()模块时,得到的永远是module.exports指向的对象 误区1 //误区1 exports.username = 'shang' module.exports = { gender: '男', age: '23' } 得到结果为: {gender:'男',age:'23'} 误区2 module.exports.username = 'shang' exports = { gender: '男' age: '23' } 得到结果为: {username:'shan

m0_50693593的博客 287

别再傻傻分不清了!Node.js里module.exports和exports到底啥关系?一个例子讲透

本文深入解析Node.js中module.exports与exports的关系,通过内存模型和实际案例揭示两者差异。初学者常混淆这两个导出方式,实际上exports只是module.exports的引用,直接赋值exports会导致导出失效。文章提供了最佳实践和常见误区,帮助开发者正确使用CommonJS模块系统。

weixin_30791095的博客 350

exports和module.exports使用误区

exports和module.exports使用误区

m0_54007573的博客 581

module.exports和exports使用误区

module.exports和exports使用误区

qq_62755767的博客 913

一图搞懂深拷贝与浅拷贝赋值差异,以node.js中module.exports和experts两种导出方式为例

分析:初始exports和module.exports是指向同一块内存区域,其内容都是一个空对象。 exports === module.exports // 输出是 true 两者都是对象,属于引用类型数据,比较的是在堆中的地址. 1.假设yourModule.js的内容是exports.a = 1; 在index.js中,用使用模块const obj= require('./yourModule'); console.log(obj)。请问代码中会输出什么结果? 答案是:{ a: 1 } 2.

m0_67805754的博客 759

CommonJS规范中module.exports和exports的区别

刚开始接触nodejs的同学对module.exports和exports的使用会有困惑,到底该使用哪一个,还是两个都可以使用,要理解二者的区别,应该先理解nodejs中require的加载机制。 // 准备module对象: var module = { id: 'hello', exports: {} }; var load = function (mod...

yuyongkun4519的博客 630

Node系列(二)——module.exports和exports对象

介绍module.exports和exports对象

hjw15910531612的博客 564

node模块中module.exports对象

在node模块化中,可以用exports.方式挂载需要导出的变量或方法,但是当直接为exports赋值时,会出现意想不到的结果 exports.a=1; exports={a:10}; // 此时require结果为{ a: 1 } 这是因为在node模块中默认会创建个module对象,module中有个exports对象,当模块中的代码执行完毕后返回module.exports对象 //代码执行前创建module对象 // var module={ // exports:{ // }

heartToSky的博客 1304

【Node.js】深度解析模块化的那些事

模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。在上方的定义中未免有一些晦涩难懂,简单的给大家举个例子:我们小时候玩的小霸王游戏机,当我们玩烦了一款游戏的时候,我们不可能直接更换一个游戏机呀,我们可以通过更换游戏带从而体验各种不同的游戏。这种形式就是模块化,把游戏分化成一个个小模块,当我们需要它的时候拿过来插入使用即可!在我们的编程中的模块化,其实就是遵循固定的规则,把一个大文件拆分成为一个个独立并且相互依赖的多个小模块。

前端小白在前进的博客 2万+
上一篇: JAVA 23种设计模式详解
下一篇: Hive内置操作符之关系运算符
IT小谷
博客等级 码龄5年 33粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值