node.js中module.exports与exports的区别

Node.js 引入了模块(Module)概念,一个模块能够经过module.exports 或 exports 将函数、变量等导出,以使其它 JavaScript 脚本经过require() 函数引入并使用。 javascript

module.exports 初始值为一个空对象 {},因此 exports 初始值也是 {},exports 是指向的 module.exports 的引用,在模块内部大概是这样:java

exports = module.exports = {}; 

举个栗子,在node.js中建立模块很是简单,一个文件就是一个模块,因此咱们建立一个name.js文件就建立了一个模块name.js,使用exports和require对象对外提供接口和引用模块。node

name.jsapp

var myName=function(){
    var name='AmberYLopez';
        console.log(name);
};
exports.myName=myName;

这样在使用的时候须要这样函数

app.jsui

var name=require('./name');

 

若是咱们建立的name.js文件是使用module.exports和require对象对外提供接口和引用模块。spa

name.js code

var myName=function(){
    var name='AmberYLopez';
        console.log(name);
};
module.exports=myName;

app.js对象

var name=require('./name');

exports 赋值实际上是给 module.exports 这个空对象添加myName属性而已,为何exports要使用添加属性的方式,而不用exports=myName?blog

exports是引用 module.exports的值。exports 被改变的时候,module.exports不会被改变,而模块导出的时候,真正导出的执行是module.exports,而不是exports。

若是将name.js改成

var myName=function(){
    var name='AmberYLopez';
        console.log(name);
};
exports=myName;

app.js

var name=require('./name');
console.log(name);

  

运行会报错。由于,前面是经过给 exports 添加属性,而如今对 exports 指向的内存作了修改,exports 和  module.exports 再也不指向同一块内存,即 module.exports 指向的那块内存并无作任何改变,仍然为一个空对象 {},因此会报错。

相关文章
相关标签/搜索