【ES6.0】-详细模块化、export与Import详解
【ES6.0】-详细模块化、export与Import详解
文章目录
- 【ES6.0】-详细模块化、export与Import详解
- 一、模块化概述
- 二、ES6模块化的语法规范
- 三、export导出模块
- 3.1 单变量导出
- 3.2 导出多个变量
- 3.3 导出函数
- 3.4 导出对象
- 第一种
- 第二种:
- 3.5 类的导出
- 第一种
- 第二种
- 四、import导入模块
- 4.1 导入整个模块
- 4.2 导入单个接口
- 4.3 导入单个接口
- 4.4 动态导入
- 4.5 仅为副本作用导入一个模块
- 五、参考
一、模块化概述
JavaScript 程序本来很小——在早期,它们大多被用来执行独立的脚本任务,在你的 web 页面需要的地方提供一定交互,所以一般不需要多大的脚本。过了几年,我们现在有了运行大量 JavaScript 脚本的复杂程序,还有一些被用在其他环境。
近年来,考虑提供一种将Javascript程序拆分为可按需导入的单独模块的机制。在ES6.0之前有很多Javascript库和框架已经开始了模块的使用如:CommonJS和基于AMD的其他模块系统如RquireJS以及最新的Webpack和Babel。最新的浏览器也支持原始模块功能。
二、ES6模块化的语法规范
在ES6模块中自动采用严格模式。规定如下:
- 变量必须先声明
- 函数参数不能有同名属性
- 不能使用with
- 对只读属性赋值、delete不可删除属性直接报错
- 不可删除变量delete prop、只能删除属性delete global[prop]
- evel不会再外层作用域有进入变量
- evel和arguments不可重新赋值
- arguments不会自动反应函数参数变化
- 禁止this指向全局
- 增加保留字:static、interface、protected等
三、export导出模块
export语法声明用于导出函数,对象,指定文件的原始值。
export有两种模块导出方式:命名导出与默认导出,命名式导出每个模块可以多个,而默认导出每个模块仅一个。
3.1 单变量导出
export var a=123
export const b='abc'
export let c='export demo'
3.2 导出多个变量
var a=123
const b = 'goyeer'
let c='goyeer export demo'
export {a,b,c}
3.3 导出函数
函数的导出与变量导出类似也需要添加export{函数名}
var add=function(a,b){return a+b
}
export {a}
3.4 导出对象
面向对象语言中一切皆对象,所以对象是一种数据类型,export也可以完成对象导出。对象的导出一般有两种写法,下面演示对象的导出:
第一种
export default{trueName:'李磊',engName:'tom',age:19
}
//导入obj.js类
//import obj from './obj.js'
//console.log(obj)
第二种:
var person = {firstName:"Bill",lastName:"Gates",age:62,eyeColor:"blue"
}
export default person
3.5 类的导出
类的导出与对象的导出类似,都是利用export default关键字,同样有两种写法:
第一种
// person.js
export default class Person{firstName = 'Bill'lastName = 'Gates'age = 62eyeColor = 'blue'show(){console.log(this.firstName)}
}
类的导入
import Person from './person.js'
let person = new Person()
person.show()
第二种
class Person{firstName = 'Bill'lastName = 'Gates'age = 62eyeColor = 'blue'show(){console.log(this.firstName)}
}
//导出类
export default Person
导入类
import person from './person.js'
let person=new Person()
person.show()
四、import导入模块
import语法用于从已导出的模块,脚本中导入函数、对象、指定文件(或模块)的原始值。
import模块导入与export模块导出功能相对应,也存在两种模块导入方式:命名式导入或默认式导入。
import的语法更require不同,而且import必须放在文件的最开始,且前面不允许有其他逻辑代码,这和其他高级语言风格一致。
4.1 导入整个模块
//导入module01的所有接口、类并制定模块名称为module01
import * as module01 from './modules/module01.js'
//使用时,需要通过新的模块module01,来访问导入文件中的成员
module01.show()
4.2 导入单个接口
// 导入单个接口
import {myExport} from '/modules/my-module.js';// 导入多个接口
import {foo, bar} from '/modules/my-module.js';// 导入接口,并制定别名,编码时更容易使用
import {fun01 as funName} from '/modules/my-module.js';
4.3 导入单个接口
// 导入默认接口
import myDefault from '/modules/my-module.js';// 导入默认接口,也可以和其他导入方式一起使用
import myDefault, * as myModule from '/modules/my-module.js';
import myDefault, {foo, bar} from '/modules/my-module.js';
4.4 动态导入
静态导入在页面加载时就会被导入,有时模块太大且不会在页面加载时使用,可以使用动态导入,在需要用的时候在导入模块。
// 方法一:
import('/modules/my-module.js').then((module) => {// Do something with the module.});// 方法二:
let module = await import('/modules/my-module.js');// 方法三:动态导入默认接口
(async () => {if (somethingIsTrue) {const { default: myDefault, foo, bar } = await import('/modules/my-module.js');}
})();
import标准用法是静态模块的导入,会使用所有被导入的模块,在加载时被编译(做不到按需编译,降低页面首次加载的速度)。在一些场景中,可以根据条件导入模块或者按需导入模块,此时可以使用import的动态导入功能替代静态导入。动态导入应用场景有如下场景:
- 当静态导入的模块很明显的降低了代码的加载速度且被使用的可能性很低,或者并不需要马上使用它。
- 当静态导入的模块很明显的占用了大量系统内存且被使用的可能性很低。
- 当被导入的模块,在加载时并不存在,需要异步获取。
- 当导入模块的说明符,需要动态构建。
- 当被导入的模块有副作用(这里说的副作用,可以理解为模块中会直接运行的代码),这些副作用只有在触发了某些条件才被需要时。(原则上来说,模块不能有副作用,但是很多时候,你无法控制你所依赖的模块的内容)
请不要滥用动态导入(只有在必要情况下采用),静态框架能更好的初始化依赖,而且更有利于静态分析工具发挥作用。
4.5 仅为副本作用导入一个模块
整个模块仅为副作用(中性词,无贬义含义)而导入,而不导入模块中的任何内容(接口)。这将运行模块中的全局代码,但实际上不导入任何值。
import "/modules/my-module.js";
五、参考
https://blog.csdn.net/u014724048/article/details/128938477
import - JavaScript | MDN (mozilla.org)
相关文章:
【ES6.0】-详细模块化、export与Import详解
【ES6.0】-详细模块化、export与Import详解 文章目录 【ES6.0】-详细模块化、export与Import详解一、模块化概述二、ES6模块化的语法规范三、export导出模块3.1 单变量导出3.2 导出多个变量3.3 导出函数3.4 导出对象第一种第二种: 3.5 类的导出第一种第二种 四、imp…...
网工内推 | Base北京,国企网工运维,最高30k*14薪,IE认证优先
01 万方数据股份有限公司 招聘岗位:网络工程师 职责描述: 1.负责完成基础网络组网工作; 2.负责网络对象的访问控制及安全策略,配置VLan,黑白名单、地址转换、故障排查及网络安全监控工作; 3.负责对操作系…...
SQL LIKE 运算符:用法、示例和通配符解释
SQL中的LIKE运算符用于在WHERE子句中搜索列中的指定模式。通常与LIKE运算符一起使用的有两个通配符: 百分号 % 代表零个、一个或多个字符。下划线 _ 代表一个单个字符。 以下是LIKE运算符的用法和示例: 示例 选择所有以字母 “a” 开头的客户&#x…...
编译原理Lab1-用FLEX构造C-Minus-f词法分析器
HNU编译原理lab1实验–根据cminux-f的词法补全lexical_analyer.l文件,完成词法分析器。 本文没有添加任何图片,但是以复制输出的形式展现出来了实验结果。 实验要求: 根据cminux-f的此法补全lexical_analyer.l文件,完成词法分析…...
网络安全之渗透测试入门准备
渗透测试入门所需知识 操作系统基础:Windows,Linux 网络基础:基础协议与简单原理 编程语言:PHP,python web安全基础 渗透测试入门 渗透测试学习: 1.工具环境准备:①VMware安装及使用;…...
【MySQL】宝塔面板结合内网穿透实现公网远程访问
文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cpo…...
通过AX6000路由器,实现外部访问内网的任意主机
概述 这里遇到一个场景,就是需要外部的人员,访问我内网的一台设备,进行内外部的设备联调。 这也是实际环境中,很常见的一种场景。 之前的做法是子设备上运行edge节点,可以直接访问。 但有的设备无法运行edge节点,那么可以参考一下这个方案来实现。 此方案可以摒弃了…...
如何应用ChatGPT撰写、修改论文及工作报告,提供写作能力及优化工作??
如果我想让gpt从pdf文档中提取相关关键词的内容,可以怎么做呢??我们评论区讨论 ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题,ChatGPT都能为您提供实用且高质量的建议和指导&am…...
camera-caps:Jetson设备上的一种实用的V4L2可视化界面
camera-caps:Jetson设备上的一种实用的V4L2可视化界面 github地址是: https://github.com/jetsonhacks/camera-caps 注意:Jetpack5.x需要选择tag 5.x版本...
CAN基础知识
CAN 简介 CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信 协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种 各样的电子控制系统被开发了出来…...
vue3跨域怎么解决?
其实很简单 假设一个接口; http://101.42.170.68:10000/open/mockData/test1 首先,看自己项目中有没有vue.config.js文件,如果没有自己创建一个,如果有那吗在其中写。 vue.config.js: //固定格式,修改一部分就行了 const { def…...
强化学习小笔记 —— 如何选择合适的更新步长
在强化学习中,动作价值函数的更新可以使用增量法,如下所示: Q k 1 k ∑ i 1 k r i 1 k ( r k ∑ i 1 k − 1 r i ) 1 k ( r k ( k − 1 ) Q k − 1 ) 1 k ( r k k Q k − 1 − Q k − 1 ) Q k − 1 1 k [ r k − Q k − 1 ] \beg…...
容斥 C. Strange Function改编题
补题: 题目详情 - 9.段坤爱取模%%% - SUSTOJ 本题或许是参考 Problem - C - Codeforces 根据题意,f(i)就是不能被整除的最小的一个质因子。 打表发现,当15个质因子相乘后,长度就大于18。 因此可以知道小于等于1e16内的正整数x…...
C++笔记
文章目录 类模板类函数什么是友元函数?什么是内联函数?VECTOR哈希表栈队列映射与解除映射mmap()munmap可变参数 va_start()-va_send()vsnprintf()C/C++异常处理list红黑树类 基类、父类、顶层类、抽象类 子类、派生类 模板类 在C++中,模板类(Template Class)是一种通用…...
python-opencv 培训课程笔记(1)
python-opencv 培训课程笔记(1) 博主参加了一次opencv库的培训课程,把课程所学整理成笔记,供大家学习,第一次课程包括如下内容: 1.读取图像 2.保存图像 3.使用opencv库显示图像 4.读取图像为灰度图像 …...
【C++初阶】STL详解(七)Stack与Queue的模拟实现
本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...
校园报修抢修小程序系统开发 物业小区报修预约上门维修工单系统
开发的功能模块有: 1.报修工单提交:学生、教职员工等可以使用小程序提交报修请求。这通常包括选择报修的问题类型(如水漏、电器故障、照明问题等),地点,报修联系人,联系电话等,并提供…...
【Android】Hilt比Android好在哪里
Hilt框架的功能和设计理念,和Dagger基本是完全一致的,Hilt也是完全在Dagger基础上进行开发的 但是Dagger的用法比较繁琐,Hilt主要是做了便用性上的改进,主要有以下点 提供常用Component,不用再为每个InjectTarget都创…...
计算方法 期末总结
思维导图 绪论 算法的性质: 有穷性、确切性、有输入输出、可行性 算法的描述方法: 自然语言、伪代码、流程图、N-S流程图 算法设计思想: 化大为小的缩减技术:二分法化难为易的校正技术:开方法化粗为精的松弛技术&a…...
【面试】jvm中堆是分配对象存储的唯一选择吗
目录 一、说明二、逃逸分析2.1 说明2.2 参数设置 一、说明 1.在《深入理解Java虚拟机》中关于Java堆内存有这样一段描述:随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得…...
3分钟搞定Dell G15散热控制:开源神器Thermal Control Center完全指南
3分钟搞定Dell G15散热控制:开源神器Thermal Control Center完全指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是一个文章写手,…...
随机计算与VDC-2n序列在低功耗硬件设计中的应用
1. 随机计算基础与VDC-2n序列特性随机计算(Stochastic Computing, SC)是一种将数值表示为比特流中"1"出现概率的计算范式。与传统二进制计算相比,SC通过概率运算实现乘加操作,仅需简单的逻辑门即可完成复杂运算。这种特性使其在低功耗、高容错…...
榨干GD32F470性能:巧用SDRAM+SPI DMA,实现240x280 TFT屏的60FPS流畅动画
榨干GD32F470性能:SDRAMSPI DMA驱动TFT屏的60FPS优化实战 当你在嵌入式系统中需要实现流畅的UI动画时,内存带宽和处理器性能往往成为瓶颈。GD32F470这颗Cortex-M4内核的MCU,配合外置SDRAM和SPI DMA,却能突破内部RAM限制࿰…...
Go语言Redis怎么做分布式锁_Go语言Redis分布式锁教程【基础】
Redis的SETNX命令只接受key和value两个参数,若用Do方法多传参数(如EX),会导致协议解析失败而返回nil;应改用SET命令的NXEX选项或go-redis/v9的SetNX方法。redis.Client.Do 调用 SETNX 为什么总是返回 nil?G…...
UE5动画状态机保姆级教程:从Idle到Walk,手把手教你用蓝图变量控制角色动画切换
UE5动画状态机实战指南:用蓝图变量构建角色动画逻辑 在虚幻引擎5的游戏开发中,动画状态机是角色动作系统的核心枢纽。想象一下,当你的游戏角色从静止到奔跑、从跳跃到落地,这些流畅的动画切换背后,正是状态机在默默协调…...
别再纠结选哪个了!手把手教你根据项目需求(RAG、推荐、搜索)选对向量数据库
向量数据库选型实战指南:从RAG到推荐系统的精准匹配 当你面对Chroma、Pinecone、Weaviate、Milvus和Faiss这五个主流向量数据库时,是否感到选择困难?每个产品官网都宣称自己性能卓越,但真实业务场景中,它们的表现差异可…...
Tiled世界编辑器终极指南:如何构建无缝拼接的大型游戏地图
Tiled世界编辑器终极指南:如何构建无缝拼接的大型游戏地图 【免费下载链接】tiled Flexible level editor 项目地址: https://gitcode.com/gh_mirrors/ti/tiled Tiled作为一款专业的2D地图编辑器,其世界(World)功能让开发者…...
科研绘图效率翻倍:用ArcGIS Pro快速搞定论文中的研究区位置示意图
科研绘图效率革命:ArcGIS Pro智能工作流打造学术级研究区示意图 在赶论文deadline的前夜,你是否还在为一张合格的研究区示意图熬夜调整比例尺?当审稿人要求补充流域位置示意图时,是否还在传统GIS软件中逐个菜单寻找功能࿱…...
技术演讲从入门到精通:如何让台下开发者为你鼓掌?
在软件测试的职业生涯中,我们常常需要展示自己的工作成果、推广新的测试方法、或者在技术社区分享经验。无论是团队内部的分享会、跨部门的技术评审,还是在行业大会上的主题演讲,一场精彩的技术演讲,不仅能清晰地传递信息…...
别再买现成模块了!手把手教你用FT232RL-REEL芯片,从零设计一个USB转串口调试器(附完整原理图)
从芯片到产品:基于FT232RL-REEL的工业级USB-UART转换器全流程开发指南 当市面上充斥着各种廉价USB转串口模块时,为什么我们还要从零开始设计?答案很简单——可靠性、定制化和真正的技术掌控。作为电子工程师,我曾在量产项目中遇到…...
