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

文章目录

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

在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.rhkb.cn/news/389580.html

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

相关文章

【数学建模】——【A题 信用风险识别问题】全面解析

目录 1.题目 2.解答分析 问题1:指标筛选 1.1 问题背景 1.2 数据预处理 1.3 特征选择方法 1.4 多重共线性检测 1.5 实现步骤 问题2:信用评分模型 2.1 问题背景 2.2 数据分割 2.3 处理不平衡数据 2.4 模型选择与理由 问题3:模型对…

notes for datawhale summer camp chemistry task3

Transformer transformer的诞生 循环神经网络:由于所有的前文信息都蕴含在一个隐向量里面,这会导致随着序列长度的增加,编码在隐藏状态中的序列早期的上下文信息被逐渐遗忘。 卷积神经网络:受限的上下文窗口在建模长文本方面天…

Taming Lookup Tables for Efficient Image Retouching

Abstract 高清屏幕在终端用户相机、智能手机和电视等边缘设备中的广泛使用,刺激了对图像增强的巨大需求。现有的增强模型通常针对高性能进行优化,但不能减少硬件推断时间和功耗,尤其是在计算和存储资源受限的边缘设备上。为此,我…

信息学奥赛初赛天天练-53-CSP-J2019阅读程序2-模拟算法在数组中典型应用

PDF文档公众号回复关键字:20240802 2019 CSP-J 阅读程序2 1阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 。除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分) 假设输入的n和m都是正整…

前端Web-JavaScript(上)

要想让网页具备一定的交互效果,具有一定的动作行为,还得通过JavaScript来实现, 这门语言会让我们的页面能够和用户进行交互。 什么是JavaScript JavaScript(简称:JS) 是一门跨平台、面向对象的脚本语言,是…

【C++11】:右值引用移动语义完美转发

目录 前言一,左值引用和右值引用二,左值引用与右值引用比较三,探索引用的底层四,右值引用使用场景和意义4.1 解决返回值问题4.2 STL容器插入接口的改变 五,移动语义六,完美转发6.1 模板中的&& 万能…

产品经理如何快速掌握大模型技术,享受AI红利?

前言 随着人工智能(AI)技术的快速发展,AI产品经理的角色变得越来越重要。尽管AI产品经理并不是一个新鲜的概念,但随着AI技术的迭代升级,这一角色的重要性得到了显著提升。 AI产品经理的演变 早期的AI产品可能并不会…

网络原理的TCP/IP

TCP/IP协议 1)应用层 应用层和应用程序直接相关,与程序员息息相关的一层协议,应用层协议,里面描述的内容,就是写的程序,通过网络具体按照啥样的方式来进行传输,不同的应用程序,就可以用不同的应用层协议,在实际开发的过程中,需要程序员自制应用层协议 应用层协议本质上就是对…

python: 多进程实例

1. 实例一 主进程跟子进程的通过两个队列实现全双工通信;如有需要主进程会提示窗口输入信息传输给子进程;如果子进程收到主进程的消息,会弹窗提示收到的消息;子进程弹窗提示进程即将结束; 详细代码如下 # -*- coding…

独立站+TikTok达人:自主营销与创意内容的完美结合

在全球电商市场迅猛发展的今天,独立站和TikTok达人的结合正在创造一种全新的电商营销模式。独立站作为电商平台,其自主性和灵活性为商家提供了广阔的发展空间;而TikTok达人凭借其独特的内容创作能力和庞大的粉丝基础,成为推动销售…

OpenStack;异构算力网络架构;算力服务与交易技术;服务编排与调度技术

目录 OpenStack 一、OpenStack概述 二、OpenStack的主要组件及功能 三、OpenStack的架构 四、OpenStack的应用场景 异构算力网络架构 算力服务与交易技术 服务编排与调度技术 OpenStack 是一个开源的云计算管理平台项目,由NASA(美国国家航空航天局)和Rackspace合作…

「AI绘画Stable Diffusion 零基础入门 」AI 绘画SD原理与工具介绍,万字详解新手入门必看!

大家好,我是设计师阿威 AI 绘画原理 想要入门 AI 绘画,首先需要了解它的原理是什么样的。 其实很早就已经有人基于深度学习模型展开了对图像生成的研究了,但在那时,生成的图像分辨率和内容都非常抽象。 直到近两年&#xff0c…

C++必修:STL之vector的模拟实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 为了让我们更加深入理解vector,接下来我们将模拟实现一个简易版的vect…

二叉树链式结构的实现(递归的暴力美学!!)

前言 Hello,小伙伴们。你们的作者菌又回来了,前些时间我们刚学习完二叉树的顺序结构,今天我们就趁热打铁,继续我们二叉树链式结构的学习。我们上期有提到,二叉树的的底层结构可以选为数组和链表,顺序结构我们选用的数…

将YOLOv8模型从PyTorch的.pt格式转换为OpenVINO支持的IR格式

OpenVINO是Open Visual Inference & Neural Network Optimization工具包的缩写,是一个用于优化和部署AI推理模型的综合工具包。OpenVINO支持CPU、GPU和NPU设备。 OpenVINO的优势: (1).性能:OpenVINO利用英特尔CPU、集成和独立GPU以及FPGA的强大功能提…

PHP学习:PHP基础

以.php作为后缀结尾的文件&#xff0c;由服务器解析和运行的语言。 一、语法 PHP 脚本可以放在文档中的任何位置。 PHP 脚本以 <?php 开始&#xff0c;以 ?> 结束。 <!DOCTYPE html> <html> <body><h1>My first PHP page</h1><?php …

3千米以上音视频键鼠延长解决方案:KVM光纤延长器

KVM光纤延长器​​​​​​​是什么&#xff1f; KVM光纤延长器是一种使用光纤来传输键盘、视频和鼠标&#xff08;KVM&#xff09;信号的设备&#xff0c;由发送端和接收端组成&#xff0c;一般成对使用。它可以让用户在远离电脑的地方如同在本地一样方便快捷的操作电脑。 KV…

mysql数据库基础语法(未完)

数据库的超级用户是root 一、注释 &#xff08;1&#xff09;“-- ”减号减号空格 注意不要省略空格 &#xff08;2&#xff09;“#” 井号 二、数据库操作 1、创建 CREATE DATABASE [IF NOT EXISTS] <数据库名> [CHARACTER SET utf8] 2、删除 DROP DATABASE …

MySQL —— 初始数据库

数据库概念 在学习数据库之前&#xff0c;大家保存数据要么是在程序运行期间&#xff0c;例如&#xff1a;在学习编程语言的时候&#xff0c;大家写过的管理系统&#xff0c;运用一些简单的数据结构&#xff08;例如顺序表&#xff09;来组织数据&#xff0c;可是程序一旦结束…