首先我们需要知道的是,node 真正导出的对象是 module.exports

那exports 又是怎么回事呢?

其实,在一开始,exports 和 module.exports 引用的都是同一个 空对象。也就是说,给这两个对象添加属性时,导出的是没有区别的,因为引用的是同一个对象。
看下面

test1.js

function a(){console.log('i am a')
}
function b(){console.log('i am b')
}exports.a = a
module.exports.b = b


exports 和 module.exports 指向(引用)同一个对象,所以,给这个对象添加了两个方法,a 和 b。然后导出这个对象

test2.js

const obj = require('./test1.js')obj.a()
obj.b()// i am a
// i am b

导入module.exports 对象,这个对象上添加了 两个方法a 和 b,所以,可以调用他们。

所以,在不改变 exports 的引用时,用起来是一样的,但是改变了它的值,效果就不一样了。

test1.js

function a(){console.log('i am a')
}
function b(){console.log('i am b')
}exports = {}
exports.a = amodule.exports.b = b


这里把 exports 指向(引用)了另一个空对象,再给这个空对象添加a 方法,然后,给 module.exports 的对象添加 b 方法

test2.js

const obj = require('./test1.js')obj.b()
obj.a()// i am b
// 报错,a is not a function

因为,exports 指向(引用)了另一个对象,跟module.exports 的关系断开了,而导出的是 module.exports 指向的对象,所以, b 可以用, a报错。

当然,改变module.exports 的指向(引用)也会丢失两个的关系。这里不写了,可以自己验证下。

就是对象引用之间的关系。

我觉得图文并茂,应该懂了吧,要是js基础差,可以看我这篇文章周大侠啊 进击的 JavaScript(二) 之 数据结构

exports 和 module.exports 的区别相关推荐

  1. node.js中exports与module.exports的区别分析

    前言 关于Node.js中的exports和module.exports,很多时候都比较容易让人混淆,弄不清楚两者间的区别.那么我们就从头开始理清这两者之间的关系. 来源 在开发Node.js应用的时 ...

  2. Node.js: exports 和 module.exports 的区别

    我理解的exports 和 module.exports 的区别,欢迎大家吐槽~ 为了更好的理解 exports 和 module.exports 的关系,我们先来补点 js 基础.示例: app.j ...

  3. exports和module.exports的区别

    请牢记一条原则:无论使用 exports 暴露成员,或是 module.exports 暴露成员,最终暴露的结果,都是以 module.exports 所指向的对象为准. 1.module 对象 看一 ...

  4. Node.js 中 exports 和 module.exports 的区别

    每一个模块中都有一个 module 对象, module 对象中有一个 exports 对象 我们可以把需要导出的成员都放到 module.exports 这个接口对象中,也就是 module.exp ...

  5. Nodejs的exports与module.exports的区别

    先建两个文件 index.js util.js 在util.js 写一些内容 exports.hello = 'www';exports.add = function (a,v) {return a ...

  6. nodeJS学习(9)--- nodeJS模块:exports vs module.exports

    模块简介: 通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ 这些核心模块被编译成二进制文件,可以 require('模块名') ...

  7. 一文解读exports、module.exports 和 export、export default

    对于前端初学者来说,exports.module.exports 和 export.export default 容易让人产生误解,笔者顺便写篇文章解读一下. 第一部分:exports 和 modul ...

  8. exports 和 module.exports

    (1)exports和module.exports的作用都是将文件模块里面的方法和属性暴露给require返回的对象进行调用,区别就是exports暴露的方法和属性都可以被module.exports ...

  9. nodejs中的exports和module.exports

    module是随文件而生的全局变量,它有exports属性,这个属性默认是一个空的字典. node的设计者画蛇添足有定义了一个exports全局变量,export指向module.exports所指向 ...

最新文章

  1. 伍哥原创之豆荚商城商品搜索架构介绍
  2. 解决arXiv上传LaTeXpaper的坑
  3. bart使用方法_使用简单变压器的BART释义
  4. 在哪里学python-深圳学python人工智能培训去哪里
  5. 計蒜客/數正方形(dp)
  6. Java泛型原理、类型擦除
  7. InTouch软件介绍
  8. root 红米note5_小米红米Note 5(不要降级刷低版本)手机完美获取root教程,最强root工具,亲测可用!...
  9. 五个小时学会Asp连接access添加,删除,修改
  10. scylladb 4.1 分布式安装部署
  11. 网页JS自动化脚本(一)安装油猴或暴力猴等脚本管理器并新建脚本
  12. 《红警2》防空步兵都说了些什么?
  13. 成长了,记录一下,增值税发票识别写入excel文件里
  14. 简单的猜数字小游戏(1 ~ 100)
  15. Android文件读写操作(assets 文件、 raw文件、内部存储文件、外部存储文件)
  16. TEM TE TM模的区别和电磁波模式
  17. Visual Paradigm使用技能
  18. STM32F103 实例应用(2)——DAP仿真下载以及STVP下载
  19. java 公交管理系统 代码_Java学员作品-城市公交管理系统
  20. 梁祝二胡独奏_发展独奏

热门文章

  1. python安装错80072ee2_更新Win10系统出现0x80072ee2错误的解决方法
  2. Linux——4linux实用操作
  3. 2-网络编程模型:认识客户端-服务器网络模型的基本概念
  4. Windows下安装自动化部署工具Fabric
  5. python基础-列表(7)
  6. 【python】Visualization of field data(NBA)
  7. 成人本科计算机应用基础试题,成人本科-《大学计算机应用基础》期末复习习题及答案...
  8. poj 3259 时光穿梭问题 bellman_ford算法
  9. 卸载 OpenJDK
  10. amd为什么还用针脚_为什么英特尔的电脑CPU没有针脚,而AMD的CPU针脚却密密麻麻?...