ES6 模块化(概念)

模块化

前端为什么用模块?

举例:要想实现一打开页面,弹框和页面效果同时加载

加载模块三种规范

后端

CommonJS是主要为了JS在后端的表现制定的
CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。

前端

1. CMD规范  即Common Module Definition通用模块定义,CMD规范是国内发展出来的,就像AMD有个requireJS,CMD有个浏览器的实现SeaJS,SeaJS要解决的问题和requireJS一样,只不过在模块定义方式和模块加载(可以说运行、解析)时机上有所不同。
2. AMD规范则是异步加载模块,允许指定回调函数,在回调函数中执行操作。RequrieJS其实就是AMD现在用的最广泛,最流行的实现。

AMD与CMD区别

最明显的区别就是在模块定义时对依赖的处理不同

AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块
CMD推崇就近依赖,只有在用到某个模块的时候再去require

这种区别各有优劣,只是语法上的差距,而且requireJS和SeaJS都支持对方的写法
AMD和CMD最大的区别是对依赖模块的执行时机处理不同,注意不是加载的时机或者方式不同
很多人说requireJS是异步加载模块,SeaJS是同步加载模块,这么理解实际上是不准确的,其实加载模块都是异步的,只不过AMD依赖前置,js可以方便知道依赖模块是谁,立即加载,而CMD就近依赖,需要使用把模块变为字符串解析一遍才知道依赖了那些模块,这也是很多人诟病CMD的一点,牺牲性能来带来开发的便利性,实际上解析模块用的时间短到可以忽略。

为什么我们说两个的区别是依赖模块执行时机不同,为什么很多人认为ADM是异步的,CMD是同步的(除了名字的原因。。。)

同样都是异步加载模块,AMD在加载模块完成后就会执行改模块,所有模块都加载执行完后会进入require的回调函数,执行主逻辑,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行

CMD加载完某个依赖模块后并不执行,只是下载而已,在所有依赖模块加载完成后进入主逻辑,遇到require语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的这也是很多人说AMD用户体验好,因为没有延迟,依赖模块提前执行了,CMD性能好,因为只有用户需要的时候才执行的原因ES6正式提出了内置的模块化语法(import,前端),我们在浏览器端无需额外引入requirejs来进行模块化。统一了客户端与服务器端的模块化规范

引擎处理 import 语句是在编译时:,export语句是抛出,在使用export抛出的变量需要用 {}进行 import

import:  import {a}  from  ""; 
export const a = 10; 
const a = 10;  
export {a};   
单独返回变量时,返回内容必须有{}


import  a  from  "";    
const a = 10;
export default a;

注意:

  1. 可以是相对路径(./),也可以是绝对路径
  2. 同一个文件,导入只有一次,无论你导入多少次
  3. import “./1.js”; 相当于只是引文件
  4. import会自动提升到顶部执行
  5. 如果导出的模块内部更改,外部也会更改。
  6. import 不能使用if动态引入
import() 可以动态引入,能使用if
import ("./2.js").then(res=>{
	console.log(res);
})
  1. as—》别名
  2. export 和 export default 可以一块使用
  3. 模块化里可以继续模块化
  4. export 可以使用多次, export default 只能使用一次
  5. 继承my_module模块所有变量,用一段代码表示
export * from 'my_module'import * as an from "./2.js";
console.log(an);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值