module.exports

1.

在a.js中

var b=require('./b.js');
console.log(b);

在b.js中

function add(x,y){
return x+y;
} var result=add(100,1000); console.log(result);

执行a.js

当加载一个模块,默认被require()加载后,返回的是一个对象{}

2.

在b.js中

function add(x,y){
return x+y;
} var result=add(100,1000); console.log(result); //return "hello";会有问题
//给module.exports符什么值,加载b.js模块的时候就会返回什么值
module.exports='hello world!';

执行a.js

给module.exports符什么值,加载b.js模块的时候就会返回什么值
3.

b.js
function add(x,y){
return x+y;
} var result=add(100,1000); console.log(result); //return "hello";会有问题
//给module.exports符什么值,加载b.js模块的时候就会返回什么值
//module.exports='hello world!';//字符
//module.exports=32233;//数字
module.exports=function(x){
console.log(x);
};

a.js

 var b=require('./b.js');
console.log(b);
b('hahaha');

执行a.js

module.exports后面可以符字符串,数值,还有函数
4.
那么我们还可以这样
b.js
function add(x,y){
return x+y;
} var result=add(100,1000); console.log(result); //return "hello";会有问题
//给module.exports符什么值,加载b.js模块的时候就会返回什么值
//module.exports='hello world!';//字符
//module.exports=32233;//数字
/*module.exports=function(x){
console.log(x);
};*/ module.exports.name='Jim';
module.exports.age=11;
module.exports.show=function(){
console.log(this.name+this.age);
}

a.js

 var b=require('./b.js');
console.log(b.name);
console.log(b.age);
console.log(b.show);
b.show();

执行a.js

b.js也可以返回出这样的对象

总结:

所以,require用来加载模块,module.exports用来暴露模块

module.export与export的区别

a.js

 var b=require('./b.js');
console.log(b.name);
console.log(b.age); b.show();

b.js

module.exports.name='Bob';
exports.age=12;
exports.show=function(){
console.log(this.name+this.age);
}

执行a.js

得到的结果与module.export的1结果相同,但是module.export与export之间还是有些差别的,我们来看下面的例子

a.js

var b=require('./b.js');
console.log(b);
console.log(b.name);
console.log(b.age); b.show();
b('hahaha');

b.js

module.exports.name='Bob';
exports.age=12;
exports.show=function(){
console.log(this.name+this.age);
};
module.exports='Hello !';

执行a.js

可以看出最后暴露出的只有module.exports=“Hello !”,而exports的都没有暴露出来

原因:

因为module.exports和exports相当于一个栈里的两个变量,module.exports先指向堆里的一个对象,给对里添加了一个name属性

exports会和module.exports指向同一个对象,添加属性

之后如果又对module.export赋值:module.exports=‘Hello !’;,这个时候module.exports会指向堆里的一个新的地方

 exports就没有和module.exports在同一个对象里了,而会返回的值会是module.exports的值,所以exports不会暴露出来

再修改一下b.js

module.exports.name='Bob';
exports.age=12;
exports.show=function(){
console.log(this.name+this.age);
};
exports='Hello !';

可以看出,最终返回的还是module.exports

exports存在因为它是一个快捷方式,是为了我们使用更方便

node——module.exports的更多相关文章

  1. 探讨ES6的import export default 和CommonJS的require module.exports

    今天来扒一扒在node和ES6中的module,主要是为了区分node和ES6中的不同意义,避免概念上的混淆,同时也分享一下,自己在这个坑里获得的心得. 在ES6之前 模块的概念是在ES6发布之前就出 ...

  2. Node.js中exports与module.exports的区别

    原文:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html 你肯定对Node.js模块中用来创建函数的exports对象很 ...

  3. Node.js exports与module.exports的关系

    今天搜索module.exports时看到CNode社区上发的Hack Sparrow一篇相关文章的链接 Node.js Module – exports vs module.exports 一篇5年 ...

  4. es6 import export 与 node 中的module.exports exports

    1.export a.export 变量 export var name = 'jack';export var age = 18;//等同于 var name = 'jack';var age = ...

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

    require 用来加载代码,而 exports 和 module.exports 则用来导出代码,从接触node.js就不会它们两陌生,上代码: foo.js exports.a = functio ...

  6. Node中Exports与module.export的使用与区别

    最近在看<node开发实战详解>时有写疑问,所以自己就整理了一些资料.下面是node4.*的官方api文档(http://nodejs.cn/doc/node_4/modules.html ...

  7. (译)Node.js的模块-exports和module.exports

    原文标题:Node.js Module – exports vs module.exports 原文链接:http://www.hacksparrow.com/node-js-exports-vs-m ...

  8. Node.js模块导出module.exports 和 exports,Es6模块导出export 和export default的区别

    1.module.exports  module变量代表当前模块.这个变量是一个对象,module对象会创建一个叫exports的属性,这个属性的默认值是一个空的对象: module.exports ...

  9. node (02 CommonJs 和 Nodejs 中自定义模块)顺便讲讲module.exports和exports的区别 dependencies 与 devDependencies 之间的区别

    CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有标准的缺陷.它的终极目标就是:提供一个类似 Python,Ruby 和 Java 语言的标准库,而不只是停留在小脚本程序的阶 ...

随机推荐

  1. Linux进程地址管理之mm_struct

    FROM : http://www.cnblogs.com/Rofael/archive/2013/04/13/3019153.html Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进 ...

  2. Linux的环境中如何生成srw-rw---- 的文件权限?

    文件属性 d 开头是: 目录文件. l 开头是: 符号链接(指向另一个文件,类似于瘟下的快捷方式). s 开头是: 套接字文件(sock). b 开头是: 块设备文件,二进制文件. c 开头是: 字符 ...

  3. 【JavaScript框架封装】实现一个类似于JQuery的基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架整体架构的搭建

    /* * @Author: 我爱科技论坛 * @Time: 20180715 * @Desc: 实现一个类似于JQuery功能的框架 * V 1.0: 实现了基础框架.事件框架.CSS框架.属性框架. ...

  4. NFS学习

    linux下搭建nfs服务: NFS是network filesystem的缩写,它可以通过网络,让不同的机器.不同的操作系统共享文件. NFS支持的功能比较多,默认端口也是随机的,基于远程调用服务( ...

  5. crontab 设置定时任务

    查看当前用户已有的定时任务: crontab -l 编辑crontab: crontab -e 加入需要执行的命令: 0 */4 * * * /www/shwww.net/venv/bin/pytho ...

  6. [using_microsoft_infopath_2010]Chapter8 使用InfoPath表单web部件

    本章概要: 1.配置web part 2.创建web part连接 3.创建表单参数 4.利用其它浏览器表单参数

  7. 软件測试、ios中的測试概念以及步骤

    软件測试: 软件測试的目标是应该服务于软件项目的目标,能够通过建议反馈使用更加高效的方法和工具,提升软件开发效率以及软件开发质量.同一时候还能够通过过一些手段,更早.更快.很多其它地发现缺陷.从容减少 ...

  8. 解决ORA-02395:超出I/O使用的调用限制问题

    ORACLE的PROFILE文件是限制数据库用户使用的资源的一种手段.如:控制session或sql能使用的CPU.控制用户的password管理策略等. 数据库创建后,系统则存在名为DEFAULT的 ...

  9. insmod hello.ko -1 Invalid module format最简单的解决的方法

    在下也是从网上搜索到的这样的解决的方法. 遇到这样的情况后,通过dmesg看一下内核日志. 假设发现有例如以下日志.那就好办了. hello: version magic '2.6.33.3 ' sh ...

  10. 存储概念解析:NAS与SAN的区别

    目前存储网络技术领域中的两个主旋律是SAN(存储区域网络)和NAS(网络连接区域存储),两者都宣称是解决现代企业高容量数据存储需求的最佳选择. 正如在餐厅就餐时大厨不会为您传菜,跑堂不会为您烹制鲜橙烩 ...