规范

  1. 一个文件是一个模块, 拥有单独的作用域 (kiss原则,keep it simple stupid)

    global是nodejs的全局对象

  1. var a = 100;
  2. console.log(global.a); // undefined
  3. consoel.log(arguments);

**

  1. 普通方式定义的变量、函数、对象,都属于模块内部
    一个文件是一个模块相当于

    1. (function (xxx, require, module, __filename, __dirname){
    2. var a = 100
    3. console.log(global.a);
    4. console.log(__filename, __dirname);
    5. })
  2. 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

  1. - 如果两个js相互引用,只输出已经加载的部分,还未执行的部分不会输出
  2. - 不会产生循环依赖
  3. - 正常时应该避免相互依赖的做法
  4. 4. exportsmodule.exports
  5. 1. global. 全局导出但不推荐,会污染全局
  6. 2. exports module.exports 区别
  7. 1. 在模块开始时,exports = module.exports,即exports引用了module.exports
  8. 相当于
  9. ```javascript
  10. (funciton(exports, require, module, __filename, __dirname){
  11. exports = module.exports;
  12. });
  13. //差别在于
  14. exports = { //这样是导不出去
  15. a: 1
  16. }
  17. module.exports = { //这样可以
  18. a: 1
  19. }
  20. //因为刚开始是 module.exports的引用赋给exports, 如果用exports = {}这样就会把此引用改写了,导致没修改到module.exports。
  21. //最终还是要看module.exports来导出。

REPL Read Eval Print Loop 交互式解释器

  1. node