node03- CommonJS

1、 CommonJS模块化设计的思想(AMD/CMD/ES6 MODULE都是模块设计思想)

  1.CommonJS规定,每一个JS都是一个单独的模块(模块是私有的:里面涉及的值和变量以及函数等都是私有的,和其它JS文件中的内容是不冲突的)

  2.CommonJS中可以允许模块中的方法互相的调用
    B模块中想要调取A模块中的方法
      =>A导出
      =>B导入

  [导出]
    CommonJS给每一个模块(每个JS)中都设置了内置的变量/属性/方法
      module.exports:模块的这个“属性”是用来导出当前模块的属性和方法的 [object]
      exports:是内置的一个“变量”,也是用来导出当前模块属性方法的,虽然和module.exports不就是一个东西,但是对应的值是同一个(module.exports=exports 值都是对象)

  [导入]
    require:CommonJS提供的内置变量,用来导入模块的(其实导入的就是module.exports暴露出来的东西);导入的值也是[object]类型的;

2、 CommonJS特点

     1. 所有代码都运行在模块作用域,不会污染全局作用域(每一个模块都是私有的,包括里面所有的东西也都是私有的,不会和其它模块产生干扰)

     2. 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。(为了保证性能,减少模块代码重复执行的次数)

     3. 模块加载的顺序,按照其在代码中出现的顺序。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。

3、 案例:A/B/C三个模块
A中有一个sum方法:实现任意数求和
B中有一个avg方法:实现任意数求平均(先求和再求平均:B中用到A)
C中调取B中的avg,实现 12,23,34,45,56,67,78,89 求平均数
A

//快速求和 
module.exports = {
	sum(...arg) {  //展开符号展开所有参数
		return eval(arg.join("+"))
	},
}

B

let A = require('./A');
module.exports = {
    avg(...arg) {
        return A.sum(...arg) / arg.length;
    }
};

C

let B = require('./B');
console.log(B.avg(12, 23, 34, 45, 56, 67, 78, 89));

posted @ 2020-09-14 14:23  麦子同学  阅读(114)  评论(0编辑  收藏  举报