ES模块化的导入和导出

我们定义两个文件aaa.js和bbb.js。
aaa.js:

let name="Tom";
let age=20;
console.log("name:"+name+" age:"+age+" in aaa.js")

bbb.js:

let name="Jack";
let age=22;
console.log("name:"+name+" age:"+age+" in bbb.js")

然后我们在html里面引入这两个js文件。

    <script src="aaa.js"></script>
    <script src="bbb.js"></script>

很显然,浏览器会直接报错,觉得你重复定义变量。

在这里插入图片描述
这时候,只需要在引入js的时候添加type属性,并且设置类型为module就可以解决变量重复的问题了。
浏览器认为你是两个模块的变量,是互相独立的。这就是ES6提供的模块化支持。

    <script src="aaa.js" type="module"></script>
    <script src="bbb.js" type="module"></script>

这时候我们写一个ccc.js。并且在html中引入。

console.log("name:"+name)
console.log("age:"+age)
console.log(sum(1,2))

aaa.js添加了sum方法

let name="Tom";
let age=20;
function sum(a,b) {
    return a+b
}
console.log("name:"+name+" age:"+age+" in aaa.js")
    <script src="aaa.js" type="module"></script>
    <script src="bbb.js" type="module"></script>
    <script src="ccc.js" type="module"></script>

这里age报错了,说age没有定义。因为都设置type为module,别的js文件定义的内容就不能访问到了。所以报未定义。
但这里还有一个问题,name应该也访问不到,为什么没有先报错?这是因为window对象也有一个变量叫name,直接引用window的name属性了。所以变量最好不要取name这个名字。
在这里插入图片描述

那么我又想用这么办呢?这时候就需要导出给别的文件用。
只需要使用export关键字把需要暴露的变量或者方法导出提供给别的js使用就行了。

let name="Tom";
let age=20;
function sum(a,b) {
    return a+b
}
console.log("name:"+name+" age:"+age+" in aaa.js")

export {
    sum,name,age
}

别的js文件在使用导出的变量的时候要先导入,这样就同时解决了命名冲突和不能引用别的模块内容的问题。

import {age} from "./aaa.js";
import {name} from "./aaa.js";
import {sum} from "./aaa.js";
console.log("name:"+name)
console.log("age:"+age)
console.log(sum(1,2))

在这里插入图片描述

导出的多种方式

1.导出为对象。
一个个导出,比较麻烦。

export {
    sum,name,age
}

2.导出单个变量
这种好处是可以在定义好的变量前加一个export关键字就可以了。

export var isChange=true

3.导出方法

export function foo(a) {
    console.log(a)
}

4.导出类

export class Person{
   constructor(name,age) {
      this.name=name
       this.age=age
   }

   run(){
       console.log(this.name+"在奔跑")
   }

}

5.通配符导入
前面都是导出,这里讲一个导入,其实是导出的一个补充。
定义的导出可能有很多,一个个导入不太方便,可以使用 3

import * as data from "./aaa.js"
console.log(data.name);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值