规范
- 一个文件是一个模块, 拥有单独的作用域 (kiss原则,keep it simple stupid)
global是nodejs的全局对象
var a = 100;
console.log(global.a); // undefined
consoel.log(arguments);
**
普通方式定义的变量、函数、对象,都属于模块内部
一个文件是一个模块相当于(function (xxx, require, module, __filename, __dirname){
var a = 100;
console.log(global.a);
console.log(__filename, __dirname);
})
require()
- 核心模块
- 不需要加入路径,直接用模块名
require(‘fs’);
- 不需要加入路径,直接用模块名
- 文件模块
- 绝对路径
- 相对路径
- 如果沒有扩展名会以 .js .json .node 来尝试
- 加载后会被缓存
- Module._cache() ```javascript // test.js console(‘only 1 times’); const a = 100; function test(){ console.log(a); } module.exports.test = test; module.exports.a = 1
- 核心模块
// main.js let {test} = require(‘./test.js’); let {a} = require(‘./test.js’); test(); console.log(a);
// only 1 times; 即使多试reuqire引用也是只会执行一次,之后就被缓存,以防止 // 100 // 100
- 如果两个js相互引用,只输出已经加载的部分,还未执行的部分不会输出
- 不会产生循环依赖
- 正常时应该避免相互依赖的做法
4. exports,module.exports
1. global. 全局导出但不推荐,会污染全局
2. exports 与 module.exports 区别
1. 在模块开始时,exports = module.exports,即exports引用了module.exports
相当于
```javascript
(funciton(exports, require, module, __filename, __dirname){
exports = module.exports;
});
//差别在于
exports = { //这样是导不出去
a: 1
}
module.exports = { //这样可以
a: 1
}
//因为刚开始是 module.exports的引用赋给exports, 如果用exports = {}这样就会把此引用改写了,导致没修改到module.exports。
//最终还是要看module.exports来导出。
REPL Read Eval Print Loop 交互式解释器
node