Discuss
/
JavaScript
/
module.exports 与 exports 的个人理解
module.exports 与 exports 的个人理解
Topic source想补充说明下,赋值以后exports就不再是module.exports的引用的原因是如果直接对exports赋值就相当于在load函数里面重新定义了一个新的exports变量,就不再是之前那个指向module.exports的exports变量了。 个人理解
楼上说值和引用传递,这是不是因为值传递和引用传递把,这里的实参exports和module都是引用传递把?要不然它们怎么可以指向同一个对象呢?之所以exports={}会出错是因为,2个引用本来指向同一个对象,这时候任何一个引用被重新赋其他值都会导致它们指向不同的对象。
var a = {x:1}
var b=a;
a={};
就像这样。
var a={exports:{}};
var b=a.exports;
也是如此,
不管你修改b,还是a.exports都会导致这2个引用指向不同对象。
那为什么修改a.exports可以,修改b却不行呢?
因为代码最后return的是module.exports呀,
如果代码最后return的是exports,那就反过来,只能对引用exports赋值才有效,对引用module.exports赋值反而无效
- 1
荔透涡儿
是否可以把exports看成是对module.exports的引用呢, 可以用exports.foo往里面增加新的属性, 但是如果直接对exports赋值, exports就不再是module.exports的引用了, 所以moudule.exports仍然为空对象{}... 个人理解?