CommonJS模块化导出原理
本人前端小菜鸡一枚,文章用于记录自我学习的知识点、想法和思路,有不正确之处,希望各位大佬多多包涵,不吝赐教
前言
CommonJS模块化导出底层原理
一、CommonJS导出方式
//方式一:
exports.a = "a"
exports.b = function(){
console.log("b函数")
}
//方式二:
module.exports = {
a:"a",
b:function(){
console.log("b函数")
}
}
两种导出方式为何都可以得到同样的结果?exports 和 module.exports 是一样的吗?
二、JS解析时的代码
1.解析过程
代码如下:
//首先把js文件中的代码放到立即执行函数中执行
(function(module){
module.exports = {};//对module.exports赋值空对象
let exports = module.exports;//二者引用值相同
//方式一:
//exports.a = "a"
//exports.b = function(){
// console.log("b函数")
//}
//方式二:
module.exports = {
a:"a",
b:function(){
console.log("b函数")
}
}
//在函数的最后会返回值
return module.exports;
})()
2.验证代码正确性
代码如下:
//先对exports下的属性进行赋值,再对module.exports进行重新赋值,检查结果如何
exports.a = "a"
exports.b = function(){
console.log("b函数")
}
module.exports = {}
在另一个js页面引入以上代码,会发现导入的结果为 { },可以验证代码正确