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存在由於它是一個快捷方式,是爲了咱們使用更方便