【JavaScript】详解默认导出和命名导出的区别

news2024/9/20 18:33:28

文章目录

    • 一、默认导出
    • 二、命名导出
    • 三、默认导出和命名导出的区别
    • 四、实际应用案例
    • 五、总结

在JavaScript模块化开发中,导入和导出模块是核心操作。ES6引入的模块化语法提供了两种主要的导出方式:默认导出(default export)和命名导出(named export)。理解它们的区别和应用场景,对于编写和维护高质量的JavaScript代码至关重要。本文将深入探讨默认导出和命名导出的区别,包括其定义方式、使用场景以及优缺点。

一、默认导出

  1. 定义方式

默认导出用于导出一个模块的单一功能。每个模块只能有一个默认导出,导出时不需要指定导出的名称。

// myModule.js
export default function greet() {
  return 'Hello, world!';
}

在上述代码中,我们定义了一个默认导出函数greet,不需要给它指定名称。

  1. 导入方式

导入默认导出时,可以给导入的实体取任意名称。

// main.js
import greet from './myModule';

console.log(greet()); // 输出:Hello, world!

main.js中,我们导入了默认导出的greet函数,并可以任意命名。

  1. 适用场景

默认导出适用于导出模块的主功能或核心功能。例如,一个模块可能包含多个辅助功能,但其核心功能更为重要,适合使用默认导出。

// mathUtils.js
export default function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

mathUtils.js中,add函数是主要功能,因此使用默认导出,而subtract函数作为辅助功能,使用命名导出。

二、命名导出

  1. 定义方式

命名导出用于导出多个功能。每个导出的功能都必须有一个名称,且每个模块可以有多个命名导出。

// myModule.js
export function greet() {
  return 'Hello, world!';
}

export function farewell() {
  return 'Goodbye, world!';
}

在上述代码中,我们定义了两个命名导出函数greetfarewell

  1. 导入方式

导入命名导出时,需要使用大括号,并且必须使用导出的名称。

// main.js
import { greet, farewell } from './myModule';

console.log(greet()); // 输出:Hello, world!
console.log(farewell()); // 输出:Goodbye, world!

main.js中,我们使用大括号导入了greetfarewell函数,导入时必须使用它们的原始名称。

  1. 适用场景

命名导出适用于导出多个相关功能,尤其在一个模块需要导出多个函数、对象或变量时。

// mathUtils.js
export function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

export const PI = 3.14159;

mathUtils.js中,我们导出了addsubtract函数以及常量PI,所有这些都使用命名导出。

三、默认导出和命名导出的区别

  1. 数量限制

默认导出:每个模块只能有一个默认导出。

命名导出:每个模块可以有多个命名导出。

  1. 导入方式

默认导出:导入时不需要大括号,且可以给导入的实体任意命名。

命名导出:导入时需要使用大括号,并且必须使用导出的名称。

  1. 使用场景

默认导出:适用于导出模块的主要功能或核心功能。

命名导出:适用于导出多个相关功能或辅助功能。

  1. 可读性和维护性

默认导出:导入时命名灵活,适合简单的模块,但可能导致命名冲突或代码难以理解。

命名导出:导入时必须使用原始名称,增强了代码的可读性和维护性,适合复杂模块。

四、实际应用案例

案例一:默认导出

// logger.js
export default function log(message) {
  console.log(message);
}

// app.js
import log from './logger';

log('This is a log message.'); // 输出:This is a log message.

在这个示例中,我们使用默认导出定义了一个日志函数log,并在app.js中导入并使用它。

案例二:命名导出

// math.js
export function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

export const PI = 3.14159;

// app.js
import { add, subtract, PI } from './math';

console.log(add(2, 3)); // 输出:5
console.log(subtract(5, 2)); // 输出:3
console.log(PI); // 输出:3.14159

在这个示例中,我们在math.js中定义了多个命名导出,并在app.js中导入并使用它们。

五、总结

理解默认导出和命名导出的区别,可以帮助我们在不同场景下选择合适的导出方式,从而编写出更清晰、可维护的代码。

  • 默认导出:适用于导出模块的主要功能,导入时命名灵活。
  • 命名导出:适用于导出多个相关功能,增强代码的可读性和维护性。

希望通过这篇文章,你能够更好地掌握JavaScript中的导出机制,为你的模块化开发提供更强的支持。Happy coding!

推荐:

  • JavaScript
  • react
  • vue

在这里插入图片描述

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

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

相关文章

【2024蓝桥杯/C++/B组/宝石组合】

代码来源2024第十五届蓝桥杯 C/CB组真题题解_蓝桥杯2024b组c语言答案-CSDN博客 证明s的简化式子

【Linux】命令行通配符

Linux在文件管理方面提供了丰富的功能,例如通配符,它是一种用于匹配文件名的特殊字符。通配符在Linux中可以帮助我们更加方便和快捷地查找和操作文件。 1.命令行通配符 通配符是一种特殊语句,主要有星号(*)、问号(?)等表示,用来…

记一个搞笑的自写类加载TemplatesImpl

今天没事想自己写个CC3类加载 结果为了顺利触发到TemplatesImpl#getTransletInstance的newInstance给我整急眼了,使劲改字段强行通过循环 结果搞了个下面的代码出来 import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; import com.sun.org.apa…

手机买对不买贵!性价比之王再升级,致敬奋斗者

众所周知,比起旗舰机,中端机一年要发几次新款机型,因此,一两千元的价位段就尤其的卷。那此时作为消费者的我们就是赚了,花更少的钱就能买到更好的产品。华为畅享70S这款手机是今年最新的一款针对性价比用户推出的千元机…

大厂面试必备的软件测试八股文【附答案】

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 前言 最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升…

7ECloud云服务器在视频流服务器中的应用

视频现在已然是人们之间互相传递的一种信息形式,而视频内容也是娱乐消费的主要形式之一,媒体平台想要提供高效,稳定的视频流服务也成为了行业关注的焦点之一。7ECloud云服务器展现出的计算能力,灵活的资源调度能力以及高度扩展性等…

【中项】系统集成项目管理工程师-第9章 项目管理概论-9.3项目经理的角色与9.4项目生命周期和项目阶段

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

C++ 位图

1. 位图概念 1. 面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。【腾讯】 1. 利用map,set等容器存储遍历 2. 排序(O(NlogN)),利用二分查找: 但是其有40亿个数据&am…

骨传导耳机哪个牌子值得入手?精选五款2024热销骨传导耳机推荐!

随着健康意识的不断提升,运动健身已成为大众生活的热门选择,而人们对运动时音乐享受的需求也随之达到了新的高度。然而,许多运动达人在享受音乐律动的同时,却常被传统耳机易脱落、维护不便等问题所困扰,这无疑给他们的…

智能计算模拟:DFT+MD+ML深度融合及科研实践应用

第一性原理、分子动力学与机器学习三者的交汇融合已在相关研究领域展现强劲的研究热潮。借助第一性原理计算揭示材料内在的量子特性,并结合分子动力学模拟探究材料在实际环境下的动态行为;运用机器学习算法与上述方法结合,开发高性能预测模型…

物理笔记-八年级上册

0.梦开始的地方 物理研究什么? 电学,力学,声学,光学,热学。 1.1.1长度的单位 国际基本单位制 单位转换 魔法记忆:千米-米-毫米-微米-纳米(进率都是1000) 单位换算计算方法 用科学…

科东软件获颁2024英特尔网络与边缘计算行业大会“技术创新奖”

AI浪潮席卷全球,它正推动着制造业向更加智能化、数字化的方向发展。作为这场技术革命的见证者和参与者,科东软件携手众多行业伙伴,与英特尔共同探讨边缘AI的未来发展趋势。 近日,第十七届英特尔网络与边缘计算行业大会在天津隆重…

28-《蔷薇》

蔷薇 蔷薇(学名:Rosa sp.):是蔷薇属部分植物的通称,主要指蔓藤蔷薇的变种及园艺品种。大多是一类藤状爬篱笆的小花,是原产于中国的落叶灌木,变异性强。茎刺较大且一般有钩,每节大致有…

分压电阻方式的ADC电压校准

无人机有个流程是电池电压校准。具体做法是:让你用万用表测量一下电池两端的电压,然后输入到文本框中,电机计算能重新计算出电压分压器的值,从而获得电池电压值。 这种方法实现的原理是这样的: 电阻分压检测电压原理&…

PRD: Peer Rank and Discussion Improve Large Language Model based Evaluations

文章目录 题目摘要相关工作方法实验与分析指标进一步分析结论 题目 PRD:同行排名和讨论改善基于大型语言模型的评估 论文地址:https://arxiv.org/abs/2307.02762 项目地址:https://openreview.net/forum?idYVD1QqWRaj 摘要 如今&#xff0c…

ChatGPT:ELMo,Transformer,Multitask

1,ELMo:Embedding新纪元 1.1,word2vec的局限性 word2vec:word2vec模型是一种可以用于各种任务的单词级别的表示学习。以单词stick为例子,它有非常多的意思: v. 粘贴;粘住;被接受&am…

webshell应急响应

前言 webshell在应急中占了很大的比例,本篇文章就来看看当遇到webshell时如何进行应急响应。 Webshell通常指以JSP、ASP、PHP等网页脚本文件形式存在的一种服务器可执行文件,一般带有文件操作、命令执行功能,是一种网页后门。攻击者在入侵一…

Email调用接口在高并发下的性能优化策略?

Email调用接口的安全保障措施?如何优化邮件调用接口? 无论是用户注册、密码重置还是促销邮件的发送,Email调用接口都是不可或缺的一部分。当面对高并发请求时,往往会成为瓶颈。AokSend将探讨几种在高并发环境下优化Email调用接口…

超级详细,如何手动安装python第三方库?

文章目录 1,python第三方库安装包有3种类型2,python第三方库安装包whl文件如何安装?3,python第三方库安装包zip和tar.gz文件如何安装?4, python第三方库安装包exe文件如何安装? 手动安装第三方库…