关于underscore源码的一点小疑问
在源码中有这样一段:
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _;
}
exports._ = _; // 要么是exports._ = _,要么是module.exports = _
} else {
root._ = _;
}
我的疑问是exports和module.exports任意用一个就行了,这两个不会有循环引用的问题么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
module.exports
和exports
的用途是不一样的,具体表现为如果输出的对象是一个整体对象我们使用module.exports
,如果是对象中的属性单个导出则使用exports
在初始化的时候, exports 和 module.exports指向的是同一个object, 所以如果你:
console.log(module.exports === exports);
会输出true
.而
require
导入时, 或者说module导出时, 导出的是module.exports
所指向的object, 所以会出现一下情况:所以如果更改为:
但是如果两者始终指向同一个object, 那么如何assign都没有关系的, 比如:
所以通常会一同使用module.exports, exports, 来确保它们指向同一个object, 这样在之后的使用中也会比较一致, 且exports可以作为module.exports的一个shortcut来使用~
其实为了防止
module
,exports
因为element id的原因而出现误判, 所以这部分代码已经更新为: