【AMD、CMD和CommonJS】
CommonJS规范的特点
对于基本数据类型,属于复制。即会被模块缓存。同时,在另一个模块可以对该模块输出的变量重新赋值。
对于复杂数据类型,属于浅拷贝。由于两个模块引用的对象指向同一个内存空间,因此对该模块的值做修改时会影响另一个模块。
当使用require命令加载某个模块时,就会运行整个模块的代码。
当使用require命令加载同一个模块时,不会再执行该模块,而是取到缓存之中的值。也就是说,CommonJS模块无论加载多少次,都只会在第一次加载时运行一次,以后再加载,就返回第一次运行的结果,除非手动清除系统缓存。
循环加载时,属于加载时执行。即脚本代码在require的时候,就会全部执行。一旦出现某个模块被"循环加载",就只输出已经执行的部分,还未执行的部分不会输出
CommonJS与AMD
CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
AMD规范则是非同步加载模块,允许指定回调函数。
由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范
CMD和AMD
1.对于依赖的模块AMD是提前执行,CMD是延迟执行。不过RequireJS从2.0开始,也改成可以延迟执行(根据写法不同,处理方式不通过)。
2.AMD推崇依赖前置(在定义模块的时候就要声明其依赖的模块),CMD推崇依赖就近(只有在用到某个模块的时候再去require——按需加载)。
3.AMD的api默认是一个当多个用,CMD严格的区分推崇职责单一。例如:AMD里require分全局的和局部的。CMD里面没有全局的 require,CMD里每个API都简单纯粹。
【AMD、CMD和CommonJS】相关推荐
- CommonJS,AMD,CMD,ES6,require 和 import 详解
CommonJS,AMD,CMD,ES6 commonJS用同步的方式加载模块.在服务端,模块文件都存在本地磁盘,读取非常快,所以这样做不会有问题.但是在浏览器端,限于网络原因,更合理的方案是使用异步 ...
- 模块化(AMD、CMD、CommonJS、ES6)
1,CommonJS 服务器,同步加载模块,加载机制是:输出拷贝 模块导出:module.exports 导入模块:require 2,AMD(异步模块定义) 用于浏览器,防止js加载阻塞页面渲染,异 ...
- 理解AMD ,CMD,CommonJS规范
https://blog.csdn.net/xcymorningsun/article/details/52709608 理解AMD ,CMD,CommonJS规范 2016年09月30日 10:33 ...
- 让你的插件兼容AMD, CMD ,CommonJS和 原生 JS
模块标准 // 支持AMD,CMD以及原生js的引用if (typeof module !== 'undefined' && typeof exports === 'object' & ...
- JS JavaScript模块化(ES Module/CommonJS/AMD/CMD)
前言 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了, jQuery,Ajax,Node.Js,MVC,MVVM等的助力也使得 ...
- AMD、CMD、CommonJS、ES6(import/export)
AMD.CMD.CommonJS.ES6(import/export) AMD.CMD.CommonJS是ES5模块化解决方案 AMD -- 异步模块 Asynchronous Module Defi ...
- 关于 CommonJS AMD CMD UMD 规范的差异总结
根据CommonJS规范,一个单独的文件就是一个模块.每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的. // foo.js var ...
- commonjs是什么_JavaScript模块化标准CommonJS/AMD/CMD/UMD/ES6Module的区别
JS-模块化进程 随着js技术的不断发展,途中会遇到各种问题,比如模块化. 那什么是模块化呢,他们的目的是什么? 定义:如何把一段代码封装成一个有用的单元,以及如何注册此模块的能力.输出的值依赖引用: ...
- AMD、CMD、CommonJs、ES6的对比
都是用于在模块化定义中使用 AMD.CMD.CommonJs是ES5中提供的模块化编程的方案 import/export是ES6中定义新增的 AMD-异步模块定义[依赖前置.异步定义] Require ...
- 浅析JS模块规范:AMD,CMD,CommonJS
from:https://www.jianshu.com/p/09ffac7a3b2c 随着JS模块化编程的发展,处理模块之间的依赖关系成为了维护的关键. 模块化 AMD,CMD,CommonJS是目 ...
最新文章
- python类库31[文件和目录os+os.path+shutil]
- ThreadPoolExecutor 八种拒绝策略,对的,不是4种
- C#中写入Excel
- Git 本地仓库与远程仓库链接
- SQL SERVER 2008 R2最大并发连接数修改为2后,SQL连接无法超过2个。
- 泰勒公式推导过程_#泰勒#(Taylor)公式真的很难很难吗?
- python如何调用阿里云接口_python 调用阿里云云解析api添加记录
- Version Control
- 熊市投身区块链,程序员的出路在哪里?
- Vue3中获取鼠标在浏览器x轴和y轴的位置
- php sqlserver 日期转字符串,sqlserver 时间(datetime)转换成字符串
- 进击的Libra:路在何方?中国应如何应对?
- Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;
- @RunWith注解找不到,怎么办?
- 让汉字快速匹配拼音、你不知道的快速方法
- 2022-2028全球LED气球灯行业调研及趋势分析报告
- 软件测试工程师这个岗位职责是什么?具体都需要干什么?
- postGIS错误line_locate_point: 1st arg isnt a line
- 什么才是一个量化交易策略的核心?
- 网页实现制作一个小日历
热门文章
- 有10名学生,每个学生的数据要求包括学号、姓名。3门课的成成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩以及最高分学生的数据(包括学号、姓名、三门课成绩、平均分数)。C++。
- Kali linux虚拟机设置1920x1080分辨率
- python通信技术_一起学Python:网络通信过程
- CVX约束中需要使用一些中间变量该怎么办
- python基础-元组、集合 、字典
- 基于Python实现Jacobi迭代法、Gauss-Seidel迭代法和SOR法方程组(二)
- 超过100项改进 100tv聚好看全新发布
- 图片怎么转换成PDF格式?这两种方法赶紧记下
- 数字通信调制方式的误码率matlab仿真,包括OOK,PRK,FSK以及QAM
- 中国计算机语言学,【CCL 2019】中国计算语言学大会(CCL 2019)技术评测报告以及研讨会...