3分钟玩转:ES6 模块化

2023-11-19

ES6 模块

ES6 使用 exportimport 导出和导入模块。

导出模块

一个模块就是一个独立的 JS 文件,该文件内的变量外部无法获取。若希望能让外部获取模块内的变量,则要用 export 关键字暴露变量。

// 分别暴露(命名行内导出)
export const age = 66
export let name = 'Bruce'
export function sayHello() {
  console.log('hello from m1.js')
}
// 统一暴露(命名子句导出)
let book = '红宝书'
let price = 129
let bookInfo = {
  author: 'Matt Frisbie',
  translator: '李松峰',
}
// 可以使用 as 关键字重命名,改名后原来的名字就不能用了
export { book, price, bookInfo as bookMessage }
// 默认暴露(默认导出)
export default {
  color: 'red',
  edition: 4,
}

一个模块只能有一个默认导出,重复的默认导出会出错。

// SyntaxError
const obj = { age: 44 }
export default obj
export default {
  name: 'Modules'
}

默认暴露和统一暴露可以组合到一起。

const foo = 'foo'
const bar = 'bar'

// foo 是默认暴露,bar 是统一暴露
export { foo as default, bar }

本质上默认暴露是导出名为 default 的变量,导入的时候可以任意取名。因此后面不能跟变量声明语句。

// 等同
export { foo as default }
export default foo

// 等同
import xxx from 'module.js'
import {default as xxx} from 'module.js'

// 报错
export default let a = 1

三种导出方式可以在同一个模块同时使用。

// 默认暴露
export default {
  color: 'red',
  edition: 4,
}

// 统一暴露
let bar = 666
let foo = 'foo'
export { bar, foo }

// 分别暴露
export let msg = 'good'

export 导出的是值的引用,导入值会随导出值的变化而改变,也就是通过接口可得到模块内部实时的值。

// m1.js
export let name = 'Bruce'
setTimeout(() => {
  name = 'good'
}, 1000)

import { name } from './m1.js'
console.log(name) // 'Bruce'
setTimeout(() => {
  console.log(name)
}, 1500) // 'good'

导入模块

使用 import 关键字导入模块。

// 导入通过分别暴露和统一暴露导出的接口
import { name, age, sayHello } from './m1.js'
// 导入通过默认暴露导出的接口,变量名自取
import defaultValue from './m3.js'
// 混合导出的接口
import defaultValue, { book, price, bookInfo } from './m3.js'

导入模块时可以对变量重命名。

import { bookInfo as bookMessage } from './m2.js'

可以使用 * 进行模块的整体导入,此时必须进行重命名。* 是一个对象,所有导入值都保存在这个对象上。

import * as person from './m1.js'

console.log(person.name)
console.log(person.age)
person.sayHello()

import 命令会提升到模块顶部再执行,它是在编译阶段执行的,在代码运行之前。

由于它是静态执行,因此无法使用在运行时才能得到结果的结构。

// 不会报错,正常运行
sayHello()
import { sayHello } from './m1.js'

// 报错
import { 'say' + 'Hello' } from './m1.js'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3分钟玩转:ES6 模块化 的相关文章

随机推荐

  • 6种方法计算神经网络参数量Params、计算量FLOPs、Macs简单代码

    方法1 统计模型参数量 total sum param nelement for param in model parameters print Number of parameter 2fM total 1e6 方法2 统计flops和参
  • Python——报数出圈

    编写程序 模拟报数游戏 有n个人围成一圈 顺序编号 从第一个人开始从1到k 假设k 3 报数 报到k的人退出圈子 然后圈子缩小 从下一个人继续游戏 问最后留下的是原来的第几号 n int input 请输入总人数 n k int input
  • 解决JavaScript中new Date(string)在IE不兼容的问题

    1 问题描述 let date 2018 09 17 let dateStr new Date date let year dateStr getFullYear let month dateStr getMonth 1 let day d
  • 【Unity2d】带你制作一款类似于金山打字的小游戏

    博主大概08年开始接触电脑游戏 当时玩的是我哥的电脑 那时候家里没网 只可以玩电脑上自带的单机游戏 比如扫雷 蜘蛛纸牌等等 当然还有红色警戒 冰封王座 星际争霸 帝国崛起等等 这些大概是我哥当时在大学下载的 也是那个时候对游戏充满了兴趣 记
  • 第十一届蓝桥杯c/c++省赛大学B组(第一次)

    目录 A题 跑步训练 5 模拟 B题 纪念日 5 年月日 C题 合并检测 10 找规律 D题 REPEAT程序 10 模拟 E题 矩阵 15 DP F题 整数序列 15 G题 解码 20 模拟 H题 走方格 20 dfs I题 整数拼接 2
  • 世界两万英尺范围内,均分布有运维体系架构

    几年前 Microsoft 与技术领先的社区专家合作发布了一本受欢迎的指导书 标题为 适用于容器化 NET 应用程序的 NET 微服务 深入探讨了构建分散式应用程序的原则 模式和最佳做法 其中包括一个功能齐全的微服务参考应用程序 展示了体系
  • [从零开始学DeepFaceLab-5]: 使用-命令行八大操作步骤-第2步:从源视频中提取图片

    目录 总体流程 步骤2 从源视频中提取图片 2 0 源视频文件和大小的选择 2 1 命令 2 extract images from video data src bat 必选
  • Qt

    我的RFID程序中 Widget继承自QWidget 在Widget h中 public定义了数据成员 QTableWidget cardtableWidget 在Widget cpp的Widget构造函数中 初始化了QTableWidge
  • 简明YAML教程

    前言 yaml是一种用来描述配置的语言 其可读性和简洁性较json更胜一筹 用yml写成的配置文件 以 yml结尾 YAML的基本语法规则 大小写敏感 使用缩进表示层级关系 缩进是使用空格 不允许使用tab 缩进对空格数目不敏感 相同层级需
  • 浏览器播放rtsp视频流:3、rtsp转webrtc播放

    浏览器播放rtsp视频流 3 rtsp转webrtc播放 文章目录 浏览器播放rtsp视频流 3 rtsp转webrtc播放 1 前言 2 rtsp转webRTC 3 初步测试结果 4 结合我们之前的onvif gSoap cgo的方案做修
  • z-index 与 元素的层叠顺序

    z index 属性设置元素的堆叠顺序 拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面 注释 元素可拥有负的 z index 属性值 注释 Z index 仅能在定位元素上奏效 例如 position absolute 说明 该属
  • Basic Level 1018 锤子剪刀布 (20分)

    题目 大家应该都会玩 锤子剪刀布 的游戏 两人同时给出手势 胜负规则如图所示 现给出两人的交锋记录 请统计双方的胜 平 负次数 并且给出双方分别出什么手势的胜算最大 输入格式 输入第 1 行给出正整数 N 1 0 5
  • c++ 学习之set和multiset区别

    区别 set不允许有重复的值 multiset可以有重复的值 代码示例 include
  • 技术干货分享,万字长文深度解读机器翻译

    编者按 在 机器翻译是如何炼成的 上 的文章中 我们回顾了机器翻译的发展史 在本篇文章中 我们将分享机器翻译系统的理论算法和技术实践 讲解神经机器翻译具体是如何炼成的 读完本文 您将了解 神经机器翻译模型如何进化并发展成令NLP研究者万众瞩
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • 利用dbnet分割条形码与文字(代码+模型)+知识蒸馏+tensorrt推理+利用pyzbar和zxing进行条形码解析

    一 DBnet 1 代码链接 分割条形码与文字代码 github链接 GitHub zonghaofan dbnet torch you can use dbnet to detect word or bar code Knowledge
  • CocosCreator之KUOKUO带你做小小赛车-摄像机跟随

    本次引擎2 0 5 编辑工具VSCode 目标 小小赛车 先亮素材 很简单 就两个 爱给网中的赛道 以及一个小车 好了 让我们新建工程然后把赛道放进去 调整方向与大小 然后把小车拖上去 这样 我是把赛道放大了2倍 旋转了90度 拖一拖位置
  • onclick传参使用function()

    对于有需要传参的按钮 需要按照以下的方式进行 直接上代码
  • 9、Linux(Ubuntu 18)安装Redis以及C操作Redis

    扩展知识 头文件搜索 Linux中库的头文件 首先include有两种写法 一种是 include 另一种是 include xxx 这两种写法的区别是 include xxx 会首先在当前目录下搜索头文件 不递归 如果找不到的话再去系统目
  • 3分钟玩转:ES6 模块化

    ES6 模块 ES6 使用 export 和 import 导出和导入模块 导出模块 一个模块就是一个独立的 JS 文件 该文件内的变量外部无法获取 若希望能让外部获取模块内的变量 则要用 export 关键字暴露变量 分别暴露 命名行内导