zoukankan      html  css  js  c++  java
  • 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));
    
    
  • 相关阅读:
    ValidateInput(false)与this.ValidateRequest = false无效的解决方案
    WPF ListView CellTemplate Border设置ListView单元格的边框
    MFC4简单的窗口重绘(非部分重绘)
    针对每个用户的作业(针对用户的定期事件)
    用JQUERY做大表单(多表单域)AJAX提交
    MFC2消息处理
    asp.net mvc实战学习笔记(1)
    NHibernate基础拾遗
    FLEX/FLASH冒泡事件与非冒泡事件
    MFC1创建窗体
  • 原文地址:https://www.cnblogs.com/maizilili/p/13666476.html
Copyright © 2011-2022 走看看