【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的动态导入功能替代静态导入。动态导入应用场景有如下场景:

  1. 当静态导入的模块很明显的降低了代码的加载速度且被使用的可能性很低,或者并不需要马上使用它。
  2. 当静态导入的模块很明显的占用了大量系统内存且被使用的可能性很低。
  3. 当被导入的模块,在加载时并不存在,需要异步获取。
  4. 当导入模块的说明符,需要动态构建。
  5. 当被导入的模块有副作用(这里说的副作用,可以理解为模块中会直接运行的代码),这些副作用只有在触发了某些条件才被需要时。(原则上来说,模块不能有副作用,但是很多时候,你无法控制你所依赖的模块的内容)

请不要滥用动态导入(只有在必要情况下采用),静态框架能更好的初始化依赖,而且更有利于静态分析工具发挥作用。

4.5 仅为副本作用导入一个模块

整个模块仅为副作用(中性词,无贬义含义)而导入,而不导入模块中的任何内容(接口)。这将运行模块中的全局代码,但实际上不导入任何值。

import "/modules/my-module.js";

五、参考

https://blog.csdn.net/u014724048/article/details/128938477

import - JavaScript | MDN (mozilla.org)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/166930.shtml

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

相关文章

FFNPEG编译脚本

下面是一个ffmpeg编译脚本: #!/bin/bash set -eu -o pipefail set eu o pipefailFFMPEG_TAGn4.5-dev build_path$1 git_repo"https://github.com/FFmpeg/FFmpeg.git" cache_tool"" sysroot"" c_compiler"gcc" cxx_compile…

2023年亚太地区数学建模大赛 C 题

我国新能源电动汽车的发展趋势 新能源汽车是指以先进技术原理、新技术、新结构的非常规汽车燃料为动力来源(非常规汽车燃料指汽油、柴油以外的燃料),将先进技术进行汽车动力控制和驱动相结合的汽车。新能源汽车主要包括四种类型:…

【mybatis注解实现条件查询】

文章目录 步骤1: 引入MyBatis依赖步骤2: 创建数据模型步骤3: 创建Mapper接口步骤4: 配置MyBatis步骤5: 执行条件查询 步骤1: 引入MyBatis依赖 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.x.…

MobaXterm连接节点一段时间后超时Session stopped

1、MobaXterm &#xff08;1&#xff09;设置ssh 超时时间 &#xff08;2&#xff09;设置保持连接 如果服务器端设置了超时时间&#xff0c;会以服务器为准&#xff0c;具体设置&#xff1a; 2、服务端 cat /etc/ssh/sshd_config | grep "ClientAlive" 可以把设置…

一穿一戴一世界 | 紫光展锐2023智能穿戴沙龙成功举办

11月23日&#xff0c;紫光展锐在深圳成功举办了以“一穿一戴一世界”为主题的2023智能穿戴沙龙。展锐智能穿戴沙龙已举办四届&#xff0c;旨在为行业提供启发性的观点和前瞻性的创新理念。本届沙龙吸引了终端厂商、行业翘楚、生态伙伴等行业各领域超过500人汇聚一堂&#xff0c…

【HTML5-webscoket实时通信(web)】

websocket是什么&#xff1f; 就是用来创建网络聊天室&#xff0c;实时通信websocket的方法有哪些&#xff1f; https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets如何实现&#xff1a;&#xff08;以下实现流程&#xff09; 前端&#xff1a; // 直播中// 聊天web…

机器篇——决策树(六) 细说 评估指标的交叉验证

本小节&#xff0c;细说 评估指标的交叉验证。 三. 评估指标 3. 交叉验证(cross validation) (1). 概念 交叉验证(cross validation, cv) 主要用于模型训练或建模应用中&#xff0c;如分类预测、PCR、PLS 回归建模等。在给定的样本空间中&#xff0c;拿出大部分…

HCIA-RS基础-静态路由协议

摘要&#xff1a;静态路由是一种在网络中广泛应用的路由选择方案&#xff0c;它以其简单的配置和低开销而备受青睐。本文将介绍静态路由的配置方法、默认路由的设置、路由的负载分担和备份策略。通过学习本文&#xff0c;希望可以你能够掌握静态路由的基本概念和在华为模拟器中…

贪心算法个人见解

目录 基本思想&#xff1a; 贪心算法的步骤&#xff1a; 示例&#xff1a; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种基于贪心策略的算法范式&#xff0c;它在每一步选择中都采取当前状态下的最优选择&#xff0c;而不考虑全局最优解。贪心算法通常适用于那些…

U-Boot 之九 详解 Pinctrl 子系统、命令、初始化流程、使用方法

嵌入式芯片中,引脚复用是一个非常常见的功能,U-Boot 提供一个类似 Linux Kernel 的 Pinctrl 子系统来处理引脚复用功能。正好最近用到了这部分功能,需要移植 Pinctrl 驱动,特此记录一下学习过程。 架构 U-Boot 提供一个类似 Linux Kernel 的 Pinctrl 子系统,用来统一各芯…

Double 4 VR智能互动教学系统在小语种课堂中的教学应用

小语种课堂一直是教育领域的一个难点。由于语言本身的复杂性和文化背景的差异&#xff0c;小语种教学一直是一个挑战。传统的课堂教学方法往往难以激发学生的学习兴趣和动力&#xff0c;教学效果不尽如人意。而Double 4 VR智能互动教学系统为小语种课堂带来了新的可能。 Double…

视频服务网关的三大部署(三)

视频网关是软硬一体的一款产品&#xff0c;可提供多协议&#xff08;RTSP/ONVIF/GB28181/海康ISUP/EHOME/大华、海康SDK等&#xff09;的设备视频接入、采集、处理、存储和分发等服务&#xff0c; 配合视频网关云管理平台&#xff0c;可广泛应用于安防监控、智能检测、智慧园区…

RK WiFi部分信道在部分地区无法使用的原因

不同国家支持的WiFi信道不一样&#xff0c;需要正确设置wificountrycode 修改路径&#xff1a; device\rockchip\common\BoardConfig.mk 修改内容&#xff1a;androidboot.wificountrycodeXX 该属性会被解析为 ro.boot.wificountrycode framework层会在&#xff1a; framewor…

用好语言模型:temperature、top-p等核心参数解析

编者按&#xff1a;我们如何才能更好地控制大模型的输出? 本文将介绍几个关键参数&#xff0c;帮助读者更好地理解和运用 temperature、top-p、top-k、frequency penalty 和 presence penalty 等常见参数&#xff0c;以优化语言模型的生成效果。 文章详细解释了这些参数的作用…

leetcode 343.整数拆分 198.打家劫舍(动态规划)

OJ链接 &#xff1a;leetcode 343.整数拆分 代码&#xff1a; class Solution {public int integerBreak(int n) {int[] dp new int[n1];//每个n&#xff0c;拆分多个整数乘积的最大值dp [0] 0;dp [1] 1; for(int i 2 ; i<n; i){for(int j 0 ; j < i; j){dp[i] Ma…

如何看待数据确权问题?

今年8月&#xff0c;财政部发布了《关于印发<企业数据资源相关会计处理暂行规定>的通知》&#xff0c;将数据规划到公司资产负债表的“资产”项&#xff0c;明确了哪些数据资源可以计入无形资产、存货等资产项&#xff0c;从财务、会计处理角度对企业对数据资源享有的权利…

学习Java第52天,JDBC中statement的使用基本步骤

public class JdbcStatementQueryPart { /* * TODO: 步骤总结 (6步)* 1. 注册驱动* 2. 获取连接* 3. 创建statement* 4. 发送SQL语句,并获取结果* 5. 结果集解析* 6. 关闭资源 */public static void main(String[] args) throws SQLException {//1.注册驱动/…

小程序中的大道理--综述

前言 以下将用一个小程序来探讨一些大道理, 这些大道理包括可扩展性, 抽象与封装, 可维护性, 健壮性, 团队合作, 工具的利用, 可测试性, 自顶向下, 分而治之, 分层, 可读性, 模块化, 松耦合, MVC, 领域模型, 甚至对称性, 香农的信息论等等. 为什么不用大程序来说大道理呢? …

CMS指纹识别方式

一、手工识别 1.robots.txt文件 robots.txt文件我们写过爬虫的就知道,这个文件是告诉我们哪些目录是禁止爬取的。但是大部分的时候我们都能通过robots.txt文件来判断出cms的类型 如: 从wp路径可以看出这个是WordPress的cms 这个就比较明显了直接告诉我们是PageAdmin cms 也…

Python大语言模型实战-记录一次用ChatDev框架实现爬虫任务的完整过程

1、模型选择&#xff1a;GPT4 2、需求&#xff1a;在win10操作系统环境下&#xff0c;基于python3.10解释器&#xff0c;爬取豆瓣电影Top250的相关信息&#xff0c;包括电影详情链接&#xff0c;图片链接&#xff0c;影片中文名&#xff0c;影片外国名&#xff0c;评分&#x…