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

 更新时间:2017年03月14日 11:58:25   作者:nswbmw  
这篇文章主要介绍了Node.js 中exports 和 module.exports 的区别的相关资料,需要的朋友可以参考下

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

require 用来加载代码,而 exports 和 module.exports 则用来导出代码。但很多新手可能会迷惑于 exports 和 module.exports 的区别,为了更好的理解 exports 和 module.exports 的关系,我们先来巩固下 js 的基础。示例:

test.js

var a = {name: 1};
var b = a;

console.log(a);
console.log(b);

b.name = 2;
console.log(a);
console.log(b);

var b = {name: 3};
console.log(a);
console.log(b);

运行 test.js 结果为:

{ name: 1 }
{ name: 1 }
{ name: 2 }
{ name: 2 }
{ name: 2 }
{ name: 3 }

解释:a 是一个对象,b 是对 a 的引用,即 a 和 b 指向同一块内存,所以前两个输出一样。当对 b 作修改时,即 a 和 b 指向同一块内存地址的内容发生了改变,所以 a 也会体现出来,所以第三四个输出一样。当 b 被覆盖时,b 指向了一块新的内存,a 还是指向原来的内存,所以最后两个输出不一样。

明白了上述例子后,我们只需知道三点就知道 exports 和 module.exports 的区别了:

  1. module.exports 初始值为一个空对象 {}
  2. exports 是指向的 module.exports 的引用
  3. require() 返回的是 module.exports 而不是 exports

现在我们来看 Node.js 官方文档的截图:

我们经常看到这样的写法:

exports = module.exports = somethings

上面的代码等价于:

module.exports = somethings
exports = module.exports

原理很简单,即 module.exports 指向新的对象时,exports 断开了与 module.exports 的引用,那么通过 exports = module.exports 让 exports 重新指向 module.exports 即可。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • nodeJS微信分享

    nodeJS微信分享

    这篇文章主要为大家详细介绍了nodeJS微信分享的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 关于npm主版本升级及其相关知识点总结

    关于npm主版本升级及其相关知识点总结

    npm是Node.js默认的包管理器,以javascript 编写的软件包管理系统用于分享和使用代码,下面这篇文章主要给大家介绍了关于npm主版本升级及其相关知识点总结的相关资料,需要的朋友可以参考下
    2022-12-12
  • Node.js控制台彩色输出的方法与原理实例详解

    Node.js控制台彩色输出的方法与原理实例详解

    这篇文章主要给大家介绍了关于Node.js控制台彩色输出的方法与原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • node事件循环和process模块实例分析

    node事件循环和process模块实例分析

    这篇文章主要介绍了node事件循环和process模块,结合实例形式分析了node事件循环和process模块具体功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2020-02-02
  • Ajax获取node服务器数据的完整步骤

    Ajax获取node服务器数据的完整步骤

    这篇文章主要给大家介绍了关于Ajax获取node服务器数据的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 如何用nodejs给C#写一个数据表的实体类生成工具

    如何用nodejs给C#写一个数据表的实体类生成工具

    这篇文章主要介绍了如何用nodejs给C#写一个数据表的实体类生成工具,对nodejs感兴趣的同学,可以参考下
    2021-05-05
  • node将Excel数据转为JSON的示例代码

    node将Excel数据转为JSON的示例代码

    平时工作中我们基本都会接触到excel数据表,但是在代码中使用和处理数据的时候通常都要先将其转为json格式数据,json格式的数据可以更加方便我们进行处理,那么我们要怎么将Excel数据转为JSON数据呢,接下来本文给大家详细介绍一下
    2024-11-11
  • node.js微信小程序配置消息推送的实现

    node.js微信小程序配置消息推送的实现

    这篇文章主要介绍了node.js微信小程序配置消息推送的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 使用Node.js实现HTTP 206内容分片的教程

    使用Node.js实现HTTP 206内容分片的教程

    这篇文章主要介绍了使用Node.js实现HTTP 206内容分片的教程,Node.js是一款用于服务器端的JavaScript框架,需要的朋友可以参考下
    2015-06-06
  • better sqlite3安装node gyp原生模块编译prebuild-install

    better sqlite3安装node gyp原生模块编译prebuild-install

    这篇文章主要为大家介绍了Nodejs关于原生模块编译node-gyp + prebuild-install (以安装 better-sqlite3为例)详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11

最新评论