22Module语法

概述

  1. CommonJS 是服务器模块加载规范,AMD 是浏览器模块加载规范
  • 前者,nodejs中requiremodule.exports
  • 后者,requireJS中requiredefined
  1. ES6 可以成为服务器和浏览器通用的模块加载方案
  • import {...} from ...export

严格模式

模块自动应用严格模式

  • 变量必须先声明后使用
  • 不能使用fn.callerfn.callee
  • 不能对evalarguments重新赋值
  • 不能使用delete删除变量,只能用来删除对象属性
  • 不能使用前缀0表示八进制
  • 禁止this指向全局对象
  • 添加保留字staticprotectedinterface

export

动态绑定

  1. 可以输出变量声明语句,函数定义等,不能直接输出值
  2. export 是和变量动态绑定,CommonJS 输出值的缓存
  3. as可以重命名,那么一个变量就可以输出多次
// 正确方法
export var a =1
export function fn() {}
// 错误方式
var a = 1
export a
function fn() {}
export fn
// 错误方式改变后
var a = 1
export {a}
function fn() {}
export {fn}

export default 默认输出

其实相当于输入一个default的变量,之后跟的值赋值给变量。在导出的时候,允许import使用任何变量承接

  1. 导出变量的时候,exportexport default情况刚好相反
  2. 导出函数的时候,export default可以导出匿名函数和函数定义
  3. 在导入的时候,也稍有不同,不在使用{}
// export 会报错的,export default 不会报错
var a = 1
export default a
// export default 报错
export default var a = 1

import 命令

静态执行

  1. import命令是在编译阶段执行的,因此先使用后引入是可以的。但是不能使用表达式和变量。
  2. import引入中的方法名必须和export导出的方法名一致
  3. 可以使用as重命名

整体加载

import * as all from ''

  1. 关键字*as
  2. 不允许运行时改变
  • wrong, all.foo = 'bar'

import 和 export 复合写法

作为了解,不深入

  1. 有些形式是不可以复合写的
export {foo,bar} from ""

模块的继承

  • 形式export * from ''
  • 其实相当于复合写法,先从文件中导入所有变量和方法,再全部导出
  • 这种形式会自动忽略文件中的export default

跨模块常量

  • 常量使用const
  • 其他形式和普通的模块相同,在需要使用的模块中引入即可

你可能感兴趣的:(22Module语法)