六十.模块化

114 阅读2分钟

概述

1.ES6 的模块化分为导出(export)导入(import) 两个模块。

2.ES6 引入了模块化,其设计思想是在编译时就能确定模块的依赖关系,以及输入和输出的变量。

特点

1.ES6 的模块自动开启严格模式,不管有没有在模块头部加上 use strict;

2.模块中可以导入和导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等。

3.每个模块都有自己的作用域,每一个模块内声明的变量都是局部变量,不会污染全局作用域,没有导出的变量在去全局作用域访问就会报错。

js文件:

var a=20;
var b=a+100;
var c=26;
export default b;

image.png

html文件:

 <script type="module">
        import b from "./a.js";
        console.log(b);
        console.log(c);
    </script>

image.png

image.png

4.每一个模块只加载一次(是单例的), 若再去加载同目录下同文件,直接从内存中读取。

import导入

1.与from关联使用,此时script标签的type必须设置为module

2.单例模式:多次重复执行同一句 import 语句,那么只会执行一次,而不会执行多次。import 同一模块,声明不同接口引用,会声明对应变量,但只执行一次 import。

export导出

1.export可以导出多个数据

2.与default关联使用,并且一个js模块中只能有一个或者0个export default语句。

3.export和export default区别

export导出的数据,import导入时必须和导出的标识符一样且要写在解构{}中,而export default导出的数据,import导入时任何标识符都可以接收,不用写在{}解构中。

export var a=100;
export var obj={name:"jzx",age:26};
export class fn{};
export function fm(){};
export var str="phm";
var d="gem";
export default d;

js文件

image.png

   <script type="module">
        import str_name,{a,obj,fn,fm,str} from "./b.js";
        console.log(str_name,a,obj,fn,fm,str);
    </script>

html文件

image.png

image.png

则常用export default导出一个对象,把需要导出的数据放在对象中,标识符(变量名)就是对象的成员名,成员值就是标识符的值。取出其中一个的值就用点语法。

js文件

image.png

html文件

image.png

image.png

模块化注意点

添加module:因为脚本中要用js语言引入一个外部的js文件,需要读取文件编码。使用插件让浏览器能够识别import语法。

且import导入时from后面跟的是相对网络路径,要求文件要在同一个服务器下打开。使用本地运行文件就会报错,VSC可以下载Live Server插件使用Open with Live Server打开。