模块

120 阅读1分钟
  • 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>

image.png

全部导出

//单独的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>

image.png