Skip to main content

node模块原理

JS语言本身并没有一种模块机制来保证不同的模块可以使用相同的变量名,那么node是如何实现这一点的呢?

其实实现模块功能,并不需要语法层面的支持,Node也并没有增加任何的JS语法,实现模块功能的奥秘在于JS是一种函数式编程语言,它支持 闭包。如果我们把一段JS代码用一个函数包起来,这段代码的所有全局变量就变成了函数内部的局部变量。

// 我们编写的JS
var s = 'Hello';
var name = 'world';

console.log(s + ' ' + name + '!');
// Node加载了之后的样子(node把代码包装了一下)
(function () {
// 读取的hello.js代码:
var s = 'Hello';
var name = 'world';

console.log(s + ' ' + name + '!');
// hello.js代码结束
})();
// 这样一来,原来的全局变量 s 就变成了匿名函数内部的局部变量。如果node继续加载其他模块,这些模块中定义的全局变量 s 也互不干扰。

所以 Node利用JS的函数式编程特性,轻松的实现了模块的隔离