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.mzph.cn/news/776819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是根据人类反馈的强化学习Reinforcement Learning with Human Feedback(RLHF)?

基于人类反馈的强化学习&#xff08;Reinforcement learning with human feedback&#xff09;是近年来越来越受欢迎的一种前沿技术&#xff0c;用于提高大型语言模型的性能。这是种使用人类反馈训练这些模型的有效方法&#xff0c;而该方法的输入组件与搜索评估也有诸多相似之…

[Flutter]环境判断

方式一&#xff08;推荐&#xff09; 常量kReleaseMode&#xff0c;它会根据你的应用是以什么模式编译的来获取值。bool.fromEnvironment会从Dart编译时的环境变量中获取值。对于dart.vm.product这个特定的环境变量&#xff0c;它是由Dart VM设置的&#xff0c;用来标明当前是…

【更新中】Leetcode中遇到的最短路径算法

dijsktra算法模板&#xff1a; def dijkstra(x):#x表示出发点dis[inf]*n #dis记录从x出发到各个点的最短距离&#xff0c;初始化为infdis[x]0 #源点到自己的距离为0vis[False]*n #检查各个点是否访问过for _ in range(n-1): #检查除了源点的其他n-1个点&#xff0c;更新dis…

【Android 源码】Android源码下载指南

文章目录 前言安装Repo初始化Repo选择分支没有梯子替换为清华源 有梯子 下载源码下载开始参考 前言 这是关于Android源码下载的过程记录。 环境&#xff1a;Windows上通过VMware安装的Ubuntu系统 安装Repo 创建Repo文件目录 mkdir ~/bin PATH~/bin:$PATH下载Repo工具&#…

快速排序三路划分

C 以下是C语言实现的快速排序的三路划分版本的代码&#xff1a; #include <stdio.h>// 交换两个元素的值 void swap(int* a, int* b) {int temp *a;*a *b;*b temp; }// 快速排序的三路划分 void quickSort(int* nums, int left, int right) {if (left > right) ret…

回文子串 每日温度 接雨水

647. 回文子串 力扣题目链接 如果s【i】和s【j】相同 dp【i1】【j-1】也是回文串的话 &#xff08;等于true&#xff09; 那么dp【i】【j】也是回文串 true 定义一个bool二维数组 遍历顺序是从下到上 从左到右 因为dp【i】【j】是通过dp【i1】【j-1】推出来的 i从最后一…

【漏洞复现】用友U8Cloud nc.bs.sm.login2.RegisterServlet SQL注入漏洞

0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案 0x02 漏洞概述 用友U8Cloud nc.bs.sm.login2.RegisterServlet接口处存在SQL注入漏洞,未授权的攻击者可通过此漏洞获取数据库权限,从而盗取用户数据,造成用…

OpenGL 实现“人像背景虚化“效果

手机上的人像模式,也被人们称作“背景虚化”或 ”双摄虚化“ 模式,也称为 Bokeh 模式,能够在保持画面中指定的人或物体清晰的同时,将其他的背景模糊掉。突出画面的主体部分,主观上美感更强烈。 人像模式的一般实现原理是,利用双摄系统获取景深信息,并通过深度传感器和图…

WorkPlus智能AI助理:定制化部署,拓展企业协作新境界

近年来&#xff0c;随着人工智能技术不断发展&#xff0c;智能助理在企业管理中发挥着日益重要的作用。其中&#xff0c;WorkPlus智能AI助理作为一款支持私有化部署的新一代智能助理软件&#xff0c;为企业内部协作场景带来了全新的可能性。通过结合企业自身的行业知识和应用场…

英伟达推出“地表最强AI芯片”

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 近期AI相关资讯&#xff0c;一起看看吧~ Neuralink首位脑芯片患者用意念下棋 埃隆-马斯克&#xff08;Elon Musk&#xff09;的脑芯片初创公司 Neuralink 展示了其首位脑芯片患者仅用意念下棋的情景…

VMware vSAN OSA存储策略 - 基于虚拟机的分布式对象存储

简介 博客&#xff1a;https://songxwn.com/ 存储策略 (Storage Policy) 是管理员定义的一组规则&#xff0c;这组规则定义了数据对象在 vSAN 存储上是如何保存的&#xff0c;存储策略定义了数据存储的可靠性、访问性能等特性。vSAN 提供了基于存储策略的存储管理 SPBM (Stor…

共享旅游卡2024年未来发展趋势

共享旅游卡2024年未来发展趋势分析 共享旅游卡&#xff0c;作为一种创新的旅游服务方式&#xff0c;正在逐步改变传统的旅游消费模式。它将各类旅游资源进行有机整合&#xff0c;为游客提供了更加便捷、灵活的旅游体验。 随着共享经济的日益深入&#xff0c;共享旅游卡在2024…

ssh连接

Telne服务使用很方便&#xff0c;但是它是通过明文传递信息&#xff0c;所有安全性就不高&#xff0c;目前普遍使用的SSH(SecureShell)来进行远程管理 。SSH协议有SSH1和SSH2两个版本&#xff0c;他们使用管理不同的协议和实现&#xff0c;二者互不兼容。SSH2比SSH1在安全性&am…

基于java实现的高校二手交易平台

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

无服务数据库是未来的趋势吗?

无服务数据库是未来的趋势吗&#xff1f; 无服务器数据库是未来的趋势吗&#xff1f;无服务器数据库与传统云数据库有何不同&#xff1f; Amazon Aurora Serverless&#xff08;如下图所示&#xff09;是 Amazon Aurora 的一种配置方式&#xff0c;可以按需自动扩展。 Aurora…

自学算法:03 一维动态规划

有些递归在展开计算时&#xff0c;总是重复调用同一个子问题的解&#xff0c;这种重复调用的递归变成动态规划会很有收益&#xff0c;而如果每次展开都是不同的解&#xff0c;或者重复调用的现象很少&#xff0c;那么没有改动态规划的必要。 所以任何动态规划问题都一定对应着一…

针对ETC系统的OBE-SAM模块设计方案

ETC系统组成及工作原理 ETC系统由前端系统和后台数据库系统组成&#xff0c;总体的架构如下图所示&#xff1a; 前端系统包含安装在汽车挡风玻璃上的车载单元&#xff08;On Board Unit&#xff0c;简称OBU&#xff09;、路侧单元&#xff08;Roadside Unit&#xff0c;简称RS…

深入解析Spring MVC: 原理、流程【面试版】

什么是SpringMV? 1.是一个基于MVC的web框架&#xff1b; 2.是spring的一个模块&#xff0c;是spring的子容器&#xff0c;子容器可以拿父容器的东西&#xff0c;但是反过来不可&#xff1b; 2.SpringMVC的前端控制器是DispatcherServlet&#xff0c;用于分发请求。使开发变…

python--切片

1.切片&#xff1a; 切片是编程语言为有序序列&#xff08;sequence&#xff09;准备的&#xff0c;用来切割或者截取某个片段 一个完整的切片是包含三个参数和两个冒号" : " ,用于分隔三个参数(start_index、end_index、step)。当只有一个“:”时&#xff0c;默认第…