在Node.js环境中,module对象表示模块,一个js文件就是一个模块。module对象的exports属性表示导出的本模块成员,为外界提供访问接口。exports对象与module.exports功能类似,写法更简便。二者在初始化时指向的是同一内存地址,默认值为{},其实是在文件顶部省略了var exports=module.exports这一语句。使用requir()方法加载模块,返回值是被加载模块中module.exports的值,并不是exports对象的值。
1.直接为exports添加或修改属性将同步修改module.exports的属性,因为二者依然指向同一内存块。程序结果是:
result=module.exports={age:18}
2.如果为exports对象直接赋值,exports对象将指向另一内存地址,而module.exports依然指向原先的地址。导出的结果为{}。
3.如果为module.exports直接赋值,module.exports将指向新的地址,并导出module.exports的新值。exports依然指向原先的地址,二者断开联系。
综上所述,不能为exports对象直接赋值。可以为exports或module.exports挂载属性,或为module.exports直接赋值。