模块化(AMD、CMD、CommonJS、ES6)

1,CommonJS

服务器同步加载模块,加载机制是:输出拷贝

模块导出:module.exports

导入模块:require

2,AMD(异步模块定义)

用于浏览器,防止js加载阻塞页面渲染异步的模块加载机制,

推崇依赖前置,提前执行.即使没有用到的模块,也提前加载,

require.config()定义模块路径,使用require加载模块,define()定义依赖模块

3,CMD(通用模块定义) 

用于浏览器,防止js加载阻塞页面渲染异步的模块加载机制,

推崇依赖就近,延迟执行(在需要使用的时候,才引入)

define定义模块seajs.config()全局配置模块路径,seajs.use()加载模块

4,ES6 为浏览器和服务器通用的模块解决方案。

export规范对外的接口,import引用其他的模块功能

import命令在编译时引用模块,而不是在运行时

ES5的浏览器加载规则

1.defer和async

defer是渲染完再执行(顺序),async是下载完就执行

因为async无法保证加载顺序,所以前后的多脚本,要保证并无依赖关系

ES6的浏览器加载

使用<script>标签,但是要加入type='module'属性

异步加载,页面渲染完,再执行,类似defer属性.

如果网页有多个<script type='module'>,它们会按照在页面出现的顺序依次执行

ES6引入外部模块注意事项

(1) 代码是在模块作用域之中运行,而不是全局作用域运行

(2) 模块内部的顶层变量,外部不可见

(3) 模块脚本自动采取严格模式,不管是否有声明use strict

(4) 模块之中,可以使用import命令来加载其他模块,也可以使用export命令输出对外接口

(5) 模块之中,顶层的this指向,返回undefined,而不是window

(6)同一个模块如果加载多次,将只执行一次

5,AMD,CMD,CommonJS,ES6 Module区别

1.AMD,CMD对比

1.相同点

(1) 都是异步加载模块

(2) 都实现了浏览器端模块化开发的目的

(3) 都倡导模块化开发理念,使前端模块化开发变得简单自然

(4) 解决前端开发过程中两大问题

    文件之间依赖问题

    浏览器加载多个JS时,页面失去响应的时间过长

2.不同点

(1) 官方推荐的写法不同,AMD推崇依赖前置,CMD推崇依赖就近

(2) 模块的执行时机不同,AMD是提前执行,CMD是延迟执行(按需加载)

  1. api的设计不同,AMD的API默认是一个当多个用,CMD的API严格区分,推崇职责单一

2.AMD,CMD与CommonJs与ES6 Module对比

不同点

(1) AMD,CMD都是用于浏览器的模块化,

(2) CommonJS是服务端的模块化,

(3) ES6的模块化浏览器和服务端通用

(4) AMD代表require.js,CMD代表sea.js,CommonJS代表node.js

(5) AMD和CMD都是异步加载,而CommonJS是同步加载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值