当前位置: 首页 > news >正文

ES6—Module 的语法

export命令

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

模块功能主要由两个命令构成:exportimportexport命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量。

//profile.js
//分别暴露
/* export let firstName = "li";
export let lastName = "siyu";
export function birthdy() {console.log("hello world");
} *///统一暴露(优先使用)
let firstName = "li";
let lastName = "siyu";
function birthdy() {console.log("hello world");
}
export { firstName, lastName, birthdy };

通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名。

function v1(a, b) {return a * b;
}
function v2(a, b) {return a - b;
}
export { v1 as streamV1, v2 as streamV2, v2 as streamVersion };

重命名后,v2可以用不同的名字输出两次。

需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。

//写法一
export let m = 1;
//写法二
let p = 2;
export { p };
//写法三:
let q = 3;
export { q as n };

另外,export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。

export var foo = "bar";
setTimeout(() => {foo = "baz";
}, 500);

上面代码输出变量foo,值为bar,500 毫秒之后变成baz。

最后,export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错

function fool() {export default 'bar' // SyntaxError}fool()

上面代码中,export语句放在函数之中,结果报错。

import命令

使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。

<script type="module">import { firstName, lastName } from "./profiles.js";function setName() {return firstName + " " + lastName;}console.log(setName());</script>

上面代码的import命令,用于加载profile.js文件,并从中输入变量。import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(profile.js)对外接口的名称相同。

如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名。

<script type="module">import { firstName as first, lastName } from "./profiles.js";function setName() {return first + " " + lastName;}console.log(setName());</script>

除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面。

import * as name from "./profiles.js";//可以使用"./profiles.js",中所有export出来的变量console.log(name.m);

export default命令

从前面的例子可以看出,使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。但是,用户肯定希望快速上手,未必愿意阅读文档,去了解模块有哪些属性和方法。

为了给用户提供方便,让他们不用阅读文档就能加载模块,就要用到export default命令,为模块指定默认输出。

// export-default.js
export default function () {console.log('foo');
}

上面代码是一个模块文件export-default.js,它的默认输出是一个函数。

其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。

// import-default.js
import customName from './export-default';
customName(); // 'foo'

http://www.lryc.cn/news/323688.html

相关文章:

  • GitHub gpg体验
  • 鸿蒙一次开发,多端部署(十一)交互归一
  • 基于python+vue文学名著分享系统的设计与实现flask-django-nodejs-php
  • [音视频学习笔记]七、自制音视频播放器Part2 - VS + Qt +FFmpeg 写一个简单的视频播放器
  • LeetCode每日一题——x 的平方根
  • 2024.3.22 ARM
  • 【Linux】信号的处理{信号处理的时机/了解寄存器/内核态与用户态/信号操作函数}
  • webgl浏览器渲染设置
  • 【国家计算机二级C语言】高分笔记
  • Java项目:71 ssm基于ssm+vue的外卖点餐系统+vue
  • Alibaba spring cloud Dubbo使用(基于Zookeeper或者基于Nacos+泛化调用完整代码一键启动)
  • Word为图表设置图注并在图表清单中自动生成
  • 新建maven项目中遇到的问题
  • 【剑指offer】24. 机器人的运动范围(java选手)
  • CMU 10-414/714: Deep Learning Systems --hw3
  • 前端小白的学习之路(lessscss)
  • 算法体系-15 第十五节:贪心算法(下)
  • 2.10 模型评估的方法有哪些?优缺点
  • Linux centos7安装nginx-1.24.0并且实现自启动
  • 001-Windows下PyTorch极简开发环境配置(上)
  • 分布式Raft原理详解,从不同角色视角分析相关状态
  • 大数据的实时计算和离线计算你理解吗?
  • OS Package Manager
  • 【滑动窗口、矩阵】算法例题
  • 【事务】开发用到的事务,TransactionDefinition实例详解,事务的传播机制
  • Linux信号处理
  • nuclei使用方法
  • 【并查集专题】【蓝桥杯备考训练】:网络分析、奶酪、合并集合、连通块中点的数量、格子游戏【已更新完成】
  • 数据结构(三)复杂度的深层次剖析
  • JavaWeb -- HTTP -- WEB服务器TOMCAT