1.模块引用
math.js
function add(v1,v2){ return v1+v2; } module.exports.add = add; //也可以用.exports.add = add;不过建议用module.exports,因为有时候exports需要直接赋值,如果直接使用exports=XXX,只是改变了形参
main.js
var m = require('math'); //也可以用math.js,一般省略“.js” var result = m.add(4, 1);//m其实就是math.js中的exports变量 console.log(result);
它的意义在于将类聚的方法和变量等限定在私有的作用域中。CommonJS构建的这套模块导出和引入机制使得用户完全不必考虑变量污染。
2. 代码本质
编译和执行是引入文件模块的最后一个阶段,定位到具体文件后,Node会新建一个Module对象,然后根据路径载入并编译。
在执行之后,模块的exports属性被返回给了调用方。
3. 既然exports是module对象的一个属性,直接用exports即可,那么为什么还需要存在module.exports
因为有时候require需要引入一个类,这个时候就需要使用module.exports=function(){XXX}。