在Node中,采用CommonJS模块规范。 什么是CommonJS规范?
CommonJS规范是为了解决JavaScript的作用域问题而定义的模块形式,可以使每个模块它自身的命名空间中执行。该规范的主要内容是,模块必须通过module.exports导出对外的变量或接口,通过require()来导入其他模块的输出到当前模块作用域中。
简单的说就是,根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
那在Node中导入模块毫无疑问就是以require的形式,导出模块有exports和module.exports两种,本文主要讲的就是这两者的区别。
一句话概括:require返回的其实module.exports这个对象,并不是exports,而我们在编写模块时用到的exports对象实际上只是对module.exports的引用(reference)。
那这里涉及一个引用概念:ECMAScript的数据类型算上es6的Symbol有7种,这7种又可以分为以下两种。
- 基本类型:
Undefined、Null、Boolean、Number、String、Symbol - 引用类型:
Object
举个引用类型的例子:
|
|
那么在Node的每一个文件模块当中,module.exports默认值为{}, exports当然也指向这个空对象。所以下面两者效果其实是一样的:
|
|
那么在引用的时候:
|
|
但是不能这么写:
|
|
引用时:
|
|
这样写才是ok的:
|
|
引用时:
|
|
至此,exports和module.exports的区别就是以上内容。
菜鸟学习笔记,如有不对,还希望高手指点。如有造成误解,还希望多多谅解。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。