首页 > 其他分享 >谷粒商城实战笔记-35-前端基础-ES6-模块化

谷粒商城实战笔记-35-前端基础-ES6-模块化

时间:2024-07-20 15:27:35浏览次数:14  
标签:ES6 导出 35 js 导入 export 谷粒 模块 import

文章目录

一,什么是模块化

模块化编程是一种软件设计技术,它将程序分解为独立的、可复用的部分,每个部分负责执行特定的功能。

这种设计方法在多种编程语言中都有应用,包括JavaScript(JS)。模块化的概念最早源自于结构化编程,其核心思想是通过将复杂问题分解为更小、更易于管理的单元来简化开发过程,同时也提高了代码的可读性和可维护性。

在Java中,模块化的实现通常是通过“包”(package)来完成的。包是一个命名空间,可以包含类、接口和其他包。要使用一个包中的类或接口,需要在源文件的顶部使用import语句来导入所需的包,这确保了代码的清晰性和封装性。

相比之下,JavaScript在ES6(ECMAScript 2015)之前并没有内置的模块系统,而是通过一些模式如CommonJS或AMD来模拟模块化行为。然而,随着ES6的发布,JavaScript正式引入了原生的模块支持,使用exportimport关键字来定义和使用模块。

export命令允许你从一个模块中暴露函数、对象或变量,使其可供其他模块使用。例如:

// module1.js
export function sayHello() {
    console.log('Hello!');
}

import命令则用于从其他模块中导入这些暴露的元素。例如:

// main.js
import { sayHello } from './module1.js';
sayHello(); // 输出: Hello!

通过这种方式,你可以创建一系列相互独立但又可以协同工作的模块,每个模块专注于单一职责。这种分离关注点的方法不仅有助于代码的重用,也使得大型项目更加易于管理和扩展。此外,模块化还有助于避免全局命名空间的污染,因为模块内部的变量和函数默认是私有的,除非它们被明确地导出。

模块化是现代编程实践中不可或缺的一部分,它帮助开发者构建更加健壮、灵活和可维护的应用程序。

无论是Java中的包还是JavaScript中的模块,都是为了达到这一目标而设计的工具。

二,export

模块化编程在JavaScript中引入了一种全新的组织代码的方式,使得代码更加结构化、可维护和可重用。export语句在其中扮演着关键角色,它允许我们从一个模块中公开某些属性或者方法,以供其他模块使用。下面我们将进一步探讨export的不同用法及其在实际编程中的应用。

1. export语法

当我们想要从一个模块中导出一个对象时,可以像下面这样使用export语句:

// hello.js
const util = {
    sum(a, b) {
        return a + b;
    }
};
export { util };

但是,如果这个对象是模块中唯一的导出项,我们可以直接使用export default来简化代码:

// hello.js
export default {
    sum(a, b) {
        return a + b;
    }
};

这样,其他模块在导入时就不需要指定具体的名字,而是可以自由选择。

2. 批量导出

在实际开发中,一个模块可能需要导出多个变量、函数或对象。在这种情况下,可以使用export关键字批量导出多个标识符:

// user.js
let name = 'Jack';
let age = 21;

export { name, age };

这样,其他模块就可以分别导入这些变量,而不需要导入整个模块:

// main.js
import { name, age } from './user.js';

console.log(name); // 输出: Jack
console.log(age);  // 输出: 21

3. 默认导出

export default是一个非常有用的特性,它可以让我们在一个模块中导出一个默认的导出项,这个导出项可以是任何有效的JavaScript表达式。当有多个导出项时,通常会有一个最重要的导出项,这时使用export default就显得尤为合适。

例如,如果我们想从一个模块中导出一个函数,可以这样写:

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

然后,在另一个模块中,我们可以使用import语句并给这个函数起一个新的名字:

// main.js
import mySum from './calculator.js';

console.log(mySum(5, 10)); // 输出: 15

使用export default的一个好处是,导入模块时不需要大括号,使得代码更加简洁。然而,每个模块只能有一个export default语句,这意味着如果模块中有多个需要导出的项,就需要结合使用exportexport default

以下是一个示例,展示如何在一个模块中同时使用export defaultexport

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

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

// 默认导出一个乘法函数
export default function multiply(a, b) {
    return a * b;
}

// 命名导出加法和减法函数
export { add, subtract };

在这个例子中,multiply函数被作为默认导出,而addsubtract函数则是命名导出。这意味着其他模块可以以不同的方式导入这些函数:

// main.js
import multiply, { add, subtract } from './mathUtils.js';

console.log(multiply(5, 10)); // 输出: 50
console.log(add(5, 10));     // 输出: 15
console.log(subtract(10, 5)); // 输出: 5

或者,如果你只想导入默认导出的multiply函数,可以这样写:

// main.js
import multiply from './mathUtils.js';

console.log(multiply(5, 10)); // 输出: 50

如果你想要导入所有的命名导出,可以使用* as语法来导入一个对象,该对象包含了所有命名导出:

// main.js
import multiply, * as math from './mathUtils.js';

console.log(math.add(5, 10));     // 输出: 15
console.log(math.subtract(10, 5)); // 输出: 5

通过这种方式,你可以创建一个模块,其中包含一个核心功能(通过export default提供),以及一些辅助功能(通过export提供),从而提高代码的灵活性和可扩展性。在大型项目中,这种模块化策略尤其有用,因为它允许你精细地控制模块的接口和依赖。

三,import

1,import语法

使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。
例如要使用上面导出的 util:

// 导入 util
import util from 'hello.js'
// 调用 util 中的属性
util.sum(1,2)

2,批量导入

要批量导入前面导出的 name 和 age:

import {name, age} from 'user.js'
console.log(name + " , 今年"+ age +"岁了")

但是上面的代码暂时无法测试,因为浏览器目前还不支持 ES6 的导入和导出功能。

除非借助于工具,把 ES6 的语法进行编译降级到 ES5,比如Babel-cli工具。

标签:ES6,导出,35,js,导入,export,谷粒,模块,import
From: https://blog.csdn.net/epitomizelu/article/details/140564664

相关文章

  • P3588 PUS 题解
    PUS推销我的洛谷博客。题意给出三个整数\(n,s,m\),请你构造一个整数数组\(a\)满足\(1\leqslanta_i\leqslant10^9(1\leqslanti\leqslantn)\)以及\(m\)个约束条件,或判断无解。\(a\)数组中\(s\)个数已经给出(保证合法)。\(m\)个约束条件格式如下:\(l,r,k,x_1,x_2\cd......
  • Ryujinx(Switch模拟器) v1.1.1353 中文版
    Ryujinx是一款免费、开源的NintendoSwitch模拟器,它可以在电脑上模拟NintendoSwitch游戏机的运行环境,让玩家们能够在PC上畅玩Switch游戏。Ryujinx支持大部分NintendoSwitch游戏,包括TheLegendofZelda:BreathoftheWild、SuperMarioOdyssey等知名游戏,而且还......
  • 135java jsp SSM连锁店经营会员管理系统(源码+文档+任务书+运行视频+讲解视频)
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • RK3588 tinyalsa_hal添加一个自定义声卡输入和输出
    一、添加输出声卡输出流程图:在声卡列表snd_out_sound_cards里添加一个自己的声卡,比如---a/tinyalsa_hal/audio_hw.h+++b/tinyalsa_hal/audio_hw.h@@-216,6+216,7@@enumsnd_out_sound_cards{SND_OUT_SOUND_CARD_SPDIF,SND_OUT_SOUND_CARD_SPDIF_1,......
  • TI-MSPM0G3507外设使用,SPI串口连接ICM20602陀螺仪
    写在前面备战2024电赛,使用到了TI开发板,型号MSPM0G3507,该开发板除文档外,网上资料稀少。现在为大家提供spi连接icm20602陀螺仪的代码,以促共同进步。该代码由逐飞seekfree仓库移植而来,如有侵权请私信联系我删除,谢谢。代码亲测成功,如有bug欢迎评论区指正。头文件ICM20602......
  • 35.综合练习:买飞机票
    //机票价格按照淡季旺季,头等舱经济舱收费//键盘录入机票原价、月份和仓位//旺季(5月到10月):头等舱9折,经济舱8.5折//淡季(11月到下一年的4月):头等舱7折,经济舱6.5折importjava.util.Scanner;publicclass飞机票{publicstaticvoidmain(String[]args){Sc......
  • 编译下载ma35固件
    编译ma35固件1、gitclone源码官方git仓库https://github.com/OpenNuvoton/MA35D1_Buildroot2、编译执行makenumaker_iot_ma35d16f90_defconfig使用makemenuconfig配置buidroot。使用makesavedefconfig把配置的.config文件保存回到defconfig。MA35D1芯片支......
  • [1035] Extract the content from online PDF file or PDF url
    Certainly!WhenworkingwithonlinePDFsusingthepyPDF2libraryinPython,youcanretrievethecontentfromaPDFfilehostedataURL.Let’sexploreacoupleofwaystoachievethis:Usingrequests(Python3.xandhigher):Ifyou’reusingPython3.x......
  • Java语言,MySQL数据库;基于Node+Vue的健康信息管理系统的设计与实现32355(免费领源码)计算
    Node.js健康信息管理系统的设计摘要在如今IT技术快速发展和Internet广泛应用的时代,电子和网络技术给人们生活带来了便利,同时也会直接或间接损害人们的健康。所以,本次的毕业设计创作的意义就是通过信息化的统一管理,给用户录入和查看健康信息提供了方便。本设计主要实现集人......
  • 735-基于3U VPX的AGX Xavier GPU计算主板
    基于3UVPX的AGXXavierGPU计算主板 一、板卡概述     基于3UVPX的JetsonAGXXavier GPU计算主板是LINUX环境下软件开发等理想工具。拥有VPX标准连接器和特性的接口。是用于视频处理,相机信号,支持PCIE、USB、RS422、RS232、网口、SPI、I2C等综合性......