-
ES6 引入了模块化,其设计思想是在编译时就能确定模块的依赖关系,以及输入和输出的变量。
-
ES6 的模块化分为导出(export) 与导入(import) 两个模块。
-
模块化具有以下特点
(1)不管模块化的头部有没有加上use strict,都会进入严格模式
(2)模块中可以导入和导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等。
(3)每个模块都有自己的作用域,每一个模块内声明的变量都是局部变量,不会污染全局作用域。
(4)每一个模块只加载一次(是单例的), 若再去加载同目录下同文件,直接从内存中读取。 -
导入(export)与导出(import)
(1)script标签的type必须设置为module
(2)导入分为按需导入与全部导入,导出也分为按需导出与全部导出
按需导出(变量必须写在大括号里面)
//单独的js文件,导入变量
export var a=12;
export var b=22;
export var obj={name:'karen',age:12}
export var arr=[12,34,5,6]
<script type="module">// type="module"这句代码必须写
import {a,obj} from './test.js'; //导出了变量a,obj(变量名必须与导入的变量名一致)
console.log(a,obj)
console.log(b)//b没有导出,所以未定义
</script>
全部导出
//单独的js文件,导入变量
export var a=12;
export var b=22;
export var obj={name:'karen',age:12}
export var arr=[12,34,5,6]
export default {a,b,obj,arr}//相当于把多个变量装在一个对象里面导入(如果是全部导入就需要把所以变量都写进对象里面)
//export default只能写一次
<script type="module">
import x,{a} from './test.js';//export default导出的变量可以自定义,不需要大括号,可以后面跟大括号写按需导出的变量x,{a}
console.log(x.obj)
console.log(x.b)//x中包含b,所以可以打印
console.log(x)
</script>