module输出写法
为了能够复用一些基本功能,我们通常会将其封装在module中。类似这样子:
|
|
我们也会看到其他的写法,这样的:
|
|
直接通过exports的属性来输出的,这样看起来其实很迷惑人,比如我第一次就有疑惑:
- module不是模块的意思吗? 为什么要使用module.exports的赋值来输出?
- 为什么有时候是exports来赋值输出
- 其他的地方,是如何使用我的模块呢?
- 为什么export有些可以输出多个值呢? 比如: modelu.exports = {foo: foo, tool: tool}
原理
这里其实是module在默默地做了一些事情,它会在代码中植入类似这样的代码:
|
|
这样,我们就知道了为什么exports
和module.exports
都可以作为模块的输出。
这里还要一个要注意的,之所以可以用exports
来输出,是因为它指向了module.exports
. 所以当exports
的指针被修改的时候,这样用就会出问题了。
如果输出是一个数组,或者函数,则两者是不等价的,看下面的例子:
例子一: 等价的输出
|
|
例子而: 不等价输出
|
|
廖雪峰的博客说是建议全部使用module.exports
,这样可以避免混淆。我的建议是大家最好搞清楚原理,这样使用起来才知其所以然。
ok,总结这篇文章,主要是讲了模块(module)的输出原理,为什么有两种写法,为什么每种写法都可以work,两种写法的区别和使用时机。