在前端,在浏览器中运行的 js 是没有模块的概念的,但如果把 js 放在服务器上运行,若只是简单的代码还好说,如果在大型项目中就会显得非常复杂加难以迭代维护,所以 node 引入了模块的概念。
那模块是如何实现互不影响,各自分离的呢?
我们知道在 js 中想要实现代码之间的互不影响,可以使用函数来加以分隔,使函数内部的变量待在自己的作用域范围内.
那 node 是不是这样实现的呢?问题来了,如何验证是在函数内部?
在函数中有个特殊的变量 arguments
新建 index.js
1 | console.log(arguments); |
现在可以知道确实是在函数内部,但这个函数是什么样子呢?
使用 arguments 对象的 callee 属性
1 | console.log(arguments.callee); |
可以看到常用的 exports, require, module, **filename, **dirname 是以参数形式传进来的
那么 exports 和 module.exports 有什么区别呢?
1 | console.log(exports === module.exports); |
即它们指向同一个对象
所有我们在操作 exports 时 只能通过属性来赋值。而 module.exports 却可以赋值一个对象
个人理解,如有失误,请指正