悟透前端:JavaScript ES6模块的导入导出

简介: 如今,我们无法想象没有Javascript的互联网,有些网站几乎完全使用Javascript构建的。为了使Javascript更具模块化、简洁性和可维护性,ES6引入了一种在Javascript文件之间轻松共享代码的方法。这涉及使用模块导出文件的一部分以供一个或多个其他文件使用,并在需要的地方导入所需的部分。

如今,我们无法想象没有Javascript的互联网,有些网站几乎完全使用Javascript构建的。为了使Javascript更具模块化、简洁性和可维护性,ES6引入了一种在Javascript文件之间轻松共享代码的方法。这涉及使用模块导出文件的一部分以供一个或多个其他文件使用,并在需要的地方导入所需的部分。

image.png

在本文中,将通过一些简单且实用的示例来学习Javascript中的ES6的模块。

什么是ES6模块?

模块使我们可以将代码库分成多个文件,以提高可维护性,也避免将所有代码放入一个大文件中。

为了达到这个效果,需要在HTML文档中使用一种 module 类型创建脚本。

如下代码所示:

<script type="module" src="devpoint.js"></script>

使用此 type="module" 引入的脚本就可以使用 importexport 功能。

export / import

用模块来组织代码,目的是提高代码的复用性,模块的代码通过export对外暴露,对应通过import 就可以引用了。

假设在一个名为index.js的文件中有一个代码块,并且想要在多个不同的文件中使用该特定的代码块。可以通过导出该代码块,然后将其导入其他文件来实现。

请看下面的示例,在该示例中导出了函数 multiple 和  add

export const multiply = (x, y) => {
    return x * y;
};
export const add = (x, y) => {
    return x + y;
};

也可以通过以下示例达到相同的要求:

const multiply = (x, y) => {
    return x * y;
};
const add = (x, y) => {
    return x + y;
};
export { multiply, add };

至于使用哪种方式组织代码,没有太大的区别,个人偏向第二种代码风格。当然导出不一定是函数,变量也是可以的。下面就来看下导入的代码示例:

import { multiply, add } from "./index";
console.log(multiply(1, 2));
console.log(add(1, 2));

加入需要引入的方法比较多的情况,没必要每个方法都写一遍,可以通过下面的方式,做一个统一的入口:

import * as mathHelper from "./index.js";
console.log(mathHelper.multiply(1, 2));
console.log(mathHelper.add(1, 2));

export default

仅当从文件中导出一个值或一个功能时,才可以使用 export default,我们把上面的代码稍微改一下:

// 命名函数
export default function multiply(x, y) {
    return x * y;
}
// 匿名函数
export default function (x, y) {
    return x * y;
}

只需使用 import 即可导入上面的函数,导入代码如下:

import multiply from "./index.js";
console.log(multiply(1, 2));

从上面我们可以看出区别,导入 export default 定义的函数 multiply 不需要花括号 {} ,无论文件index.jsexport default 是什么,在这里 multiply 只是一个函数名或者变量名。导入 export default 定义,可以在导入时候使用任何名称。如下的方式也是对的:

import multiplyHelper from "./index.js";
console.log(multiplyHelper(1, 2));

export default 和 export 区别

  • exportexport default都可用于导出常量、函数、文件、模块等
  • 在一个文件或模块中,export/import可以有多个,export default 只能有一个
  • 通过export方式导出的模块,在导入时要加花括号 { } ;而 export default 则不需要加花括号

总结

Javascript中的ES6模块允许将Javascript代码导出和导入到不同的文件中,这有助于将代码分解为更小的粒度文件,提高代码的复用性,从而减少代码代码冗余,也能让代码更简洁。


相关文章
|
2天前
|
JSON 前端开发 搜索推荐
BoostCompass( http_server 模块 | 项目前端代码 )
BoostCompass( http_server 模块 | 项目前端代码 )
21 4
|
7天前
|
JavaScript 前端开发 C++
【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
【5月更文挑战第2天】【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
|
8天前
|
JavaScript 前端开发 开发者
【Web 前端】什么是JS变量提升?
【5月更文挑战第1天】【Web 前端】什么是JS变量提升?
【Web 前端】什么是JS变量提升?
|
8天前
|
自然语言处理 前端开发
【Web 前端】es6 中的箭头函数?
【5月更文挑战第1天】【Web 前端】es6 中的箭头函数?
|
8天前
|
存储 前端开发 索引
【Web 前端】ES6中,Set和Map的区别 ?
【5月更文挑战第1天】【Web 前端】ES6中,Set和Map的区别 ?
|
8天前
|
前端开发 JavaScript
【Web 前端】ES6新增的内容有哪些?
【5月更文挑战第1天】【Web 前端】ES6新增的内容有哪些?
【Web 前端】ES6新增的内容有哪些?
|
9天前
|
缓存 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 前端路由实现原理
【4月更文挑战第30天】本文探讨了JavaScript前端路由在SPA中的重要性,阐述了其基本原理和实现方式,包括Hash路由和History路由。前端路由通过监听URL变化、匹配规则来动态切换内容,提升用户体验和交互性。同时,文章也提到了面临的SEO和页面缓存挑战,并通过电商应用案例分析实际应用。理解并掌握前端路由能助开发者打造更流畅的单页应用。
|
9天前
|
开发框架 前端开发 Android开发
【Flutter 前端技术开发专栏】Flutter 与原生模块通信机制
【4月更文挑战第30天】本文探讨了Flutter作为跨平台开发框架与原生Android和iOS交互的必要性,主要通过方法调用和事件传递实现。文中详细介绍了Flutter与Android/iOS的通信方式,数据传输(包括基本和复杂类型),性能优化,错误处理以及实际应用案例。理解并掌握这一通信机制对开发高质量移动应用至关重要,未来有望随着技术发展得到进一步优化。
【Flutter 前端技术开发专栏】Flutter 与原生模块通信机制
|
9天前
|
消息中间件 监控 JavaScript
Node.js中的进程管理:child_process模块与进程管理
【4月更文挑战第30天】Node.js的`child_process`模块用于创建子进程,支持执行系统命令、运行脚本和进程间通信。主要方法包括:`exec`(执行命令,适合简单任务)、`execFile`(安全执行文件)、`spawn`(实时通信,处理大量数据)和`fork`(创建Node.js子进程,支持IPC)。有效的进程管理策略涉及限制并发进程、处理错误和退出事件、使用流通信、谨慎使用IPC以及监控和日志记录,以确保应用的稳定性和性能。
|
10天前
|
前端开发 JavaScript 数据安全/隐私保护
前端javascript的DOM对象操作技巧,全场景解析(二)
前端javascript的DOM对象操作技巧,全场景解析(二)