```
//模块化:可以防止变量全局污染,在模块中定义的变量,不是全局的
// 我们使用require引入外部模块,使用的是模块标识,通过标识找到指定的模块
// 模块分成两大类:
// 核心模块:由node引擎提供的模块,标识就是模块的名字,引入不需要写路径,如npm安装的插件
// 文件模块:用户自己创建的模块,标识就是路径(绝对或相对路径),需要写路径
// 全局对象:global,它的作用和网页中的window类似,在全局中创建的变量,都会作为globa的属性保存,全局的方法,会作为global的方法保存
```
```
var a = 10; //局部变量
console.log(global.a) //undefined,在全局中未找到这个属性
```
![](https://img.kancloud.cn/9f/e5/9fe53aa79c7b446739f24516d9e46367_288x45.png)
```
b = 20; //全局变量
console.log(global.b) //20
```
![](https://img.kancloud.cn/c5/72/c572200c5ff79626a962503b181d1dac_279x38.png)
```
/*
agruments.callee -- 这个属性保存的是当前执行的函数对象
*/
console.log(arguments.callee + "") ; //+个 "" 目的是能打印出函数详情
```
![](https://img.kancloud.cn/49/a1/49a1e1fb849d65107adf3478a9aa59e7_932x347.png)
所以node在执行模块的代码时,会在顶部,添加如下代码:`function (exports, require, module, __filename, __dirname) {`
会在底部添加 `}`,所以模块化时,代码都是包装在函数里面执行,所以里面的变量都是局部变量,并且传了5个实参(exports, require, module, __filename, __dirname)
```
实参:
exports:改对象用来将变量或函数暴露到外部
require : 函数,用了引入外部模块
module : 代表当前模块,exports就是module的属性,既可以用exports导出,也可以用module.exports导出
__filename : 当前模块的完整路径
__dirname : 当前模块所在文件夹的路径
```
![](https://img.kancloud.cn/a8/b4/a8b44f13e3787db43cad446dee016728_552x215.png)