前言
exports和module.exports有这么难理解吗?有些教育机构用地址介绍这两个东西,还介绍得特别乱,把整个学习成本都提上去了。
来看看某教育机构的介绍:
是不是特别乱?反正我不想看,也不想通过这个地址来看懂。
这篇文章目的不再揭露node的行为,而是为了让大家便于理解。请不要抱着理解node的思想去看这篇文章(因为连我现在都还没接触到node本质性的知识),而是抱着理解exports、module、require这些东西的本质而去阅读。
提前说总结
由于有些人悟性比较好,或者javascript基础较扎实,我觉得有必要提前说下总结,避免看到文章后面说一句——“就这?废话了这么多?”。当然,理解能力差的同学还是建议你跳过这一段,直接看证明过程。
其实,exports、module、require无非就是三个变量而已,什么地址的,无非就是javascript顺带的东西,只要你javascript够熟悉,何须去理解它这些地址的变换。
这三个变量,是node执行你的代码前,默默帮你声明并赋值的三个变量,node是怎么帮你声明并赋值的呢,我推导了一下,大概是这样的:
// 声明module
var module = {
exports: this // module.exports指向的是全局的this对象,不信你自己打印一下是否完全相等
}
// 声明exports