javascript (AMD,CMD,Commonjs和ES6) 区别

一, commonjs

1. 对于基本数据类型,属于复制。会被模块缓存。同时,再另一个模块可以对改模块输出的变量重新赋值。

    对于复杂数据类型,属于浅拷贝。由于两个模块引用的对象指向同一个内存空间,因此改模块的值做修改时会影响另一个模块

2.当使用require命令加载一个模块时,就会运行整个模块的代码。

 当使用require命令加载同一个模块时,不会再执行改模块,而是去到缓存里取。也就是说,commonJS模块无论加载多少次,都只会在第一次加载时运行一次,以后再加载,就返回第一次运行的结果,除非手动清除系统缓存。

循环加载时,属于加载时执行。脚本代码在require的时候,就会全部执行。一旦出现某个模块被循环加载,就只输出已经执行的部分,还未执行的部分不会输出。

二,AMD

1.官方定义: 模块本身和模块之间的引用可以被异步的加载,是一个概念

先引入的模块,后使用的引用模块的方法,所以我们称为依赖前置。

优点:异步调用和本身高扩展性。实现了解耦,模块在代码中可通过识别码进行查找

三,cmd

同步的调用,原则:依赖就近原则

四,ES6

es6模块输出的是值得引用,输出接口动态绑定,而commonjs输出得是值的拷贝

es6模块编译时执行,而commonjs模块总是在运行时加载.

附 AMD和CMD的区别

AMD 通过 require.js实现 
CMD 通过 sea.js实现

1、相同处

RequireJS 和 Sea.js 都是模块加载器,倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然。

2、不同之处

定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。
遵循的规范不同。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。

RequireJS 是依赖前置,Sea.js是依赖就近

RequireJS 是先加载后执行,seaJS是按需加载执行(amd2.0添加了按需加载的方法)

插件机制不同。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值