es6新特性_前端开发必备 - ES6 新特性之 Module语法和加载实现

往期回顾:

前端开发必备 - ES6 新特性之 let 和 const 命令

前端开发必备 - ES6 新特性之 变量的解构赋值

前端开发必备 - ES6 新特性之 字符串的拓展

前端开发必备 - ES6 新特性之 正则的拓展

前端开发必备 - ES6 新特性之 数值的拓展

前端开发必备 - ES6 新特性之 对象的拓展

前端开发必备 - ES6 新特性之 Symbol

前端开发必备 - ES6 新特性之 Set和Map数据结构

前端开发必备 - ES6 新特性之 Proxy

前端开发必备 - ES6 新特性之 Promise对象

前端开发必备 - ES6 新特性之 Iterator和 for...of循环

前端开发必备 - ES6 新特性之 Generator函数和应用

前端开发必备 - ES6 新特性之 Class语法和继承

16.1 介绍

ES6之前用于JavaScript的模块加载方案,是一些社区提供的,主要有CommonJS和AMD两种,前者用于服务器,后者用于浏览器。

ES6提供了模块的实现,使用export命令对外暴露接口,使用import命令输入其他模块暴露的接口。

60e9ca813dc1d406e5a2085eab8bd36b.png

16.2 严格模式

ES6模块自动采用严格模式,无论模块头部是否有"use strict"。

严格模式有以下限制:

  • 变量必须声明后再使用
  • 函数的参数不能有同名属性,否则报错
  • 不能使用with语句
  • 不能对只读属性赋值,否则报错
  • 不能使用前缀 0 表示八进制数,否则报错
  • 不能删除不可删除的属性,否则报错
  • 不能删除变量delete prop,会报错,只能删除属性delete * global[prop]
  • eval不会在它的外层作用域引入变量
  • eval和arguments不能被重新赋值
  • arguments不会自动反映函数参数的变化
  • 不能使用arguments.callee
  • 不能使用arguments.caller
  • 禁止this指向全局对象
  • 不能使用fn.caller和fn.arguments获取函数调用的堆栈
  • 增加了保留字(比如protected、static和interface)

特别是,ES6中顶层this指向undefined,即不应该在顶层代码使用this。

16.3 export命令

使用export向模块外暴露接口,可以是方法,也可以是变量。

68508fbce2bdb84139cf7657fd206fdb.png

可以使用as重命名函数的对外接口。

特别注意:

export暴露的必须是接口,不能是值。

8a77eb293b5b350a17bdc57f644d4697.png

暴露方法也是一样:

716a426afc0eff1efa9d0f68a4985ab9.png

16.4 import命令

加载export暴露的接口,输出为变量

78e62a3060c40e5bbad1cfed778ab104.png

import后大括号指定变量名,需要与export的模块暴露的名称一致。

也可以使用as为输入的变量重命名。

import { a as leo } from './a.js';

import不能直接修改输入变量的值,因为输入变量只读只是个接口,但是如果是个对象,可以修改它的属性。

a42fba18b26e8a27b057dab2e995667c.png

import命令具有提升效果,会提升到整个模块头部最先执行,且多次执行相同import只会执行一次。

16.5 模块的整体加载

当一个模块暴露多个方法和变量,引用时可以用*整体加载。

49375d77ec2593c41b382d6fbdc6b8db.png

但是,不允许运行时改变:

412cfa89693c33dc3d4809b690271798.png

16.6 export default 命令

使用export default命令,为模块指定默认输出,引用的时候直接指定任意名称即可。

f825be9a50e62e85b502476ef9af36ba.png

export default暴露有函数名的函数时,在调用时相当于匿名函数。

83092b40bc19ab0de65d569be013a366.png

export default其实是输出一个名字叫default的变量,所以后面不能跟变量赋值语句。

0e777312f19d931e2369b9e203c6bc92.png

export default命令的本质是将后面的值,赋给default变量,所以可以直接将一个值写在export default之后。

250ac7e09cec1b626ad9a3ff70f0abc4.png

16.7 export 和 import 复合写法

常常在先输入后输出同一个模块使用,即转发接口,将两者写在一起。

882dc88ed0a3f2133be8936e14c7ae3a.png

常见的写法还有:

fb19901bd781b825f225dd26b83f9465.png

常常用在模块继承。

16.8 浏览器中的加载规则

ES6中,可以在浏览器使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值