ES6-module语法

ES6 模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量

基本使用

目录结构:

 我们要将index.html文件当做浏览器显示页面,需要引入import.js 文件即可,import.js文件中要获取export.js文件中的值

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script src="js/import.js" type="module"></script>
</body>
</html>

注意:如果是普通html文件引入带有module语法的js文件,此时html文件的script标签的type要为module,否则会报错

 import.js文件

引入export.js文件

import {a,b} from "./export.js"
console.log(a,'a')
console.log(b,'b')

import表示的是导入,es6使用import关键字来表示导入文件和数据,{}内部值是export暴露的参数

export.js

向外暴露了a和b

export var a = 1;
export var b = 2;

此时在服务器端打开index.html文件

注意:

  •   module语法如果是html文件直接打开的,要将html文件的script标签的type设置为module
  •   js文件如果要导入其他的文件,需要使用import关键字导入,后面是要获取的参数,使用{}来枚举值,最后是路径
  •   js文件如果要暴露参数使用export关键字

 别名

as关键字设置别名

 如果一个js文件中获取多个js文件的参数,难免会遇到重名的问题,比如1.js获取2.js和3.js的值,此时恰好2.js和3.js都有一个参数x,此时必定会有命名冲突,我们可以设置别名来避免这个冲突

 export.js文件

export var name = "小明";
export var age = 18;

import.js文件

import { name as myname, age } from "./export.js"

console.log(myname,age)

可以用as关键字用来设置别名,此时我们使用的时候就必须要用这个别名,不能用原来的名字,获取不到

除了获取可以使用别名外,暴露也可以设置别名

 export.js文件

function add(a, b) {
  return a + b
}

export {add as funAdd}

import.js文件

import { funAdd } from "./export.js"
console.log(funAdd(1,2))

 

 

 获取值的修改

import导入的值如果是基本类型值,是只读的,不可以进行修改

比如修改age为20

import { name as myname, age } from "./export.js"
age=20
console.log(myname,age)

 

 

 import如果导入的是引用类型值,此时是可以进行修改的

 export.js文件

export var obj = {
    name: "小明",
    age: 19
  }

import.js文件

import { obj } from "./export.js"

console.log(obj)
obj.age = 20;
console.log(obj)

如果暴露的参数是函数,是存在变量声明提升的

export.js

export function add(a, b) {
  return a + b
}

import.js

console.log(add(1, 2)) 
import { add } from "./export.js"

 

 module的静态加载

module的暴露是编译时的加载,不是运行时的加载,所以我们的import不能牵扯到逻辑判断;

if (true) {
  import { funAdd } from "./export.js"
}
console.log(funAdd(1, 3))

在import.js文件中,if语句是逻辑判断,所以import不能使用,会报错

 

 

 * as整合模块

*表示通配,as表示别名,可以用* as 别名 的 方式来整合模块

export.js

export var a = 1;
export var b = 2;
export var c = 3;
export var d = 4;

import.js

import * as results from "./export.js"
console.log(results)

 

export default默认暴露

export表示暴露参数,export表示默认暴露参数,此时import就可以省略{}

export default可以暴露基本类型值,但是我们一般都是暴露引用类性质,对象或者函数

export.js

export default {
    a: 1,
    b: 2
  }

export default每一个文件中只使用一次

export.js文件向外暴露的是一个对象,这个对象没有命名,此时的import就可以随意命名

import.js

import obj from "./export.js"
console.log(obj)

此时的import后面不用{}去解构参数了,而是自定义名称获取

 

 

 导出和导入的复合写法

 如果有三个文件a.js,b.js,c.js,此时我们的a.js文件获取的是b.js文件的内容,b.js获取的是c.js的内容,并且将c文件的暴露给a

 a.js

import {c} from "./b.js"
console.log(c)

b.js

export表示暴露,from表示取值,此时整体表示的是向外暴露的是获取c文件的值

export {c} from "./c.js"

c.js

export var c = 1;

 

posted @ 2021-10-26 20:10  keyeking  阅读(239)  评论(0编辑  收藏  举报