最新在学习 Node,学到模块化,变量导出的时候可以用如下几个方法
// 第一种方法:把变量包裹在对象中,并把对象赋值给 module.exports
module.exports = {
a
}
// 第二种方法:把变量挂在 export 上
exports.a = 1;
那么问题来了,如果我这样做呢?
const a = 1;
exports = {
a
}
打印的结果如下,看来 直接修改 export
是不行的,那么为什么?
首先找了很多博客,看不懂…
索性换了google
,搜到了一篇博文,其中的这三句话非常有用:
module.exports
初始值为一个空对象 {}exports
是指向 module.exports
的一个引用,(缩句:exports 是个引用)require()
返回的是 module.exports
而不是 exports
(关键)所以关键是module.exports
的值改了没?你改exports
的值是没有用滴
没错,就是这么简洁。
require()
返回的是 module.exports
这个知识点。到这里就可以不用看了哈~
那么export === module.export
吗?如果等于,为什么等于呢?
答:Node 帮你搞了一手~,所以说 exports
是 module.exports
的一个引用
p 等于 undefined
是因为此时的 module.exports
是1 了,也就是test
等于1了,1.add
是个啥?找不到吧,undefined
b 自然是 1,因为 require
指向的是 module.exports
这里我又提出一个疑问:既然 exports
是 module.exports
的一个引用,那么 exports
是一直指向 module.exports
的吗?如果是这样的话,那么这个语句 export === module.export
一直为true
吗?
// b.js
exports.add = 100;
console.log(exports === module.exports);
console.log("exports:>>", exports);
console.log("module.exports:>>", module.exports);
console.log("************************************");
module.exports = 1;
console.log(exports === module.exports);
console.log("exports:>>", exports);
console.log("module.exports:>>", module.exports);
// a.js
let test = require("./b");
let p = test.add;
let b = test;
console.log("p的值是:" + p);
console.log("b的值是:" + b);
// terminal
module.exports:>> { add: 100 }
wangzhongqing@wangzhongqingdeMacBook-Pro testDir % node a.js
true
exports:>> { add: 100 }
module.exports:>> { add: 100 }
************************************
false
exports:>> { add: 100 }
module.exports:>> 1
p的值是:undefined
b的值是:1
哎这跟我理解的不一样啊,我理解的:既然 export
是 module.export
的一个引用,那么 module.export
改了的话,export
也应该改啊 。
其实是我没搞清楚一个问题:改了什么?改的是指向,还是指向的内容?
我说的那个场景的情况是:exports
和 module.exports
所指向的那个地址的内容变了,而此时 module.exports
的指向已经变了。
类似如下的例子
回头看我那个问题,问的也很蠢啊,哎就是菜,哎菜也爱玩~
1.知乎(没看懂的)
2.Node官网的export