1.函数
在a.js中ui
var b=require('./b.js'); console.log(b);
在b.js中this
function add(x,y){ return x+y; } var result=add(100,1000); console.log(result);
执行a.js spa
当加载一个模块,默认被require()加载后,返回的是一个对象{}code
2.对象
在b.js中blog
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.jsio
var b=require('./b.js'); console.log(b); b('hahaha');
执行a.jsconsole
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用来暴露模块
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存在由于它是一个快捷方式,是为了咱们使用更方便