JS模块化及import、export

devtools/2024/10/19 5:01:55/

一、模块化的背景和目的

  • 模块化的背景
    • 代码重复:功能类似的代码在多个地方出现,导致维护成本增加。
    • 耦合度高:代码之间依赖性强,修改一个地方可能会导致其他部分出现问题。
    • 难以扩展:想要新增功能时,现有代码结构复杂,改动需要冒高风险。
  • 模块化的目的:
    • 方便维护模块化可以使代码结构更加清晰。开发者可以专注于维护单个模块,而不用担心整个项目的复杂性。
    • 可重用性:一个模块可以在不同的项目或同一项目的多个地方使用,减少重复代码。
    • 提高可读性和可测试性:由于每个模块的功能通常是单一的,代码更易于理解和测试,模块化的代码也更容易进行单元测试。
    • 隔离性:模块之间相互独立,一个模块的更改不会直接影响到其他模块,减少了副作用。
    • 团队协作:在大型项目中,模块化可以让多个开发者并行工作,各自负责不同的模块,从而提高开发效率。

二、模块化的原则

  1. 单一职责原则(Single Responsibility Principle, SRP)
    每个模块应仅负责一个特定的功能或任务。这使得模块更易于理解和维护,同时减少了不同功能之间的耦合。

  2. 开放-关闭原则(Open/Closed Principle, OCP)
    模块应该对扩展开放,对修改关闭。这意味着可以通过增加新功能而不是更改现有代码来扩展模块,从而降低风险。

  3. 里氏替换原则(Liskov Substitution Principle, LSP)
    子类应该可以替换父类而不影响程序的正确性。确保模块能够以一致的方式工作,可以提高代码的灵活性和可重用性。

  4. 接口隔离原则(Interface Segregation Principle, ISP)
    模块应依赖于最小的接口,而不是一个大的接口。这样可以避免不必要的依赖,提高模块的灵活性。

  5. 依赖倒置原则(Dependency Inversion Principle, DIP)
    高层模块不应依赖于低层模块,两者应依赖于抽象。通过依赖注入等方式,可以减少模块之间的耦合性,提高可测试性和灵活性。

importexport_26">三、 importexport的用法

  • export的几种用法
    • 命名导出1:在需要导出的变量/函数/对象前使用export关键字
    • 命名导出2:在最后一行使用export统一导出所有需要导出的变量/函数/对象
      • const num =1;
      • function func(){...};
      • export {num, func};
    • 默认导出1:
      • export default function(){...}
    • 默认导出2:
      • function func(){...};
      • export default func;
  • import的几种用法
    • 命名导入(对应命名导出):import { 导出名1, 导出名2, ...} from "被导出文件位置"
    • 默认导入(对应默认导出):import{ 自定义导入名 } from "被导出文件位置"
    • 命名空间导入:import * as 自定义类名 from "被导出文件位置";(导出被绑定在了这个自定义类名上,as是重命名语法)
    • 副作用导入:import "被导出文件位置"
  • 注意事项:
    • 只能在模块内部使用import/export,<script type='module'>
    • 本地测试时,模块需要启动服务器才能正常工作
    • 模块自动启动严格模式
    • 加载模块脚本无需defer,模块会自动延迟加载
  • 动态加载模块
    • import("/modules/mymodule.js").then((module) => { // Do something with the module. });
    • 可以需要时动态加载模块,而不必预先加载所有模块,具有性能优势。

http://www.ppmy.cn/devtools/126925.html

相关文章

C++ OpenCV实现简单的自瞄脚本(OpenCV实战)

练枪的时候发现打的靶子特征很醒目&#xff0c;而且操控的逻辑也不是说特别难&#xff0c;刚好会一点点C和OpenCV&#xff0c;为什么不试试写一个小程序来帮助我们瞄准呢&#xff1f; 实现效果 我们主要是通过这款游戏测试自瞄 简单的调参之后本周世界排名也是打到了第一名&…

【C#】第三章习题

选择题 C#程序的主方法是&#xff1a; A. main()B. Main()C. class()D. namespace() 正确答案&#xff1a;B 可用作C#程序用户标识符的一组标识符是&#xff1a; A. void define WORDB. a3_b3 _123 YNC. for -abc CaseD. 2a DO sizeof 正确答案&#xff1a;B C#的数据类型有&…

设计模式在 C# 中的应用

一、引言 在软件开发领域&#xff0c;设计模式是经过实践验证的、用于解决特定软件设计问题的通用方案。它们如同建筑师手中的蓝图&#xff0c;能帮助开发者构建出结构清晰、可维护性强且易于扩展的软件系统。了解并掌握这 些设计模式&#xff0c;对于提升软件质量、降低开发成…

零基础学进程(level 1)

目录 引言 硬件 冯诺依曼体系结构 硬件解读 内存的必要性 实例解读 软件&#xff08;OS&#xff09; 硬件管理 先描述后组织 总结&#xff1a; 进程的概念 何为进程 进程控制块&#xff1a;pcb 访问OS 引言 Linux操作系统以其稳定性和灵活性而闻名于世&#xff0c…

线性可分支持向量机的原理推导 标准优化目标 公式解析

本文是将文章《线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 公式 9-6 是从之前的最大化间隔问题&#xff08;公式 9-4 和 9-5&#xff09;推导出来的支持向量机&#xff08;SVM&#xff09;的优化问题。它表示的是一…

利用 HandBrake 压制视频

HandBrake 简介 这是一款全桌面平台的开源免费软件&#xff0c;在 Windows、macOS、Linux 下均有对应的应用程序界面。 HandBrake 基于鼎鼎大名的 FFmpeg 多媒体框架。FFmpeg 本身是命令行程序&#xff0c;可以这么理解&#xff1a;HandBrake 是为方便调用 FFmpeg 而开发的用…

组合式API有什么好处

什么是组合式API&#xff1f; 组合式 API (Composition API) 是一系列 API &#xff08;响应式API、生命周期钩子、依赖注入&#xff09;的集合。它不是函数式编程&#xff0c;组合式 API 是以 Vue 中数据可变的、细粒度的响应性系统为基础的&#xff0c;而函数式编程通常强调…

网络通信与并发编程(三)粘包现象解决方案、socketserver实现并发

粘包现象解决方案、socketserver实现并发 文章目录 粘包现象解决方案、socketserver实现并发一、粘包现象解决方案1.发送数据大小2.发送数据信息 二、socketserver实现并发1.tcp版的socketserver并发2.udp版的socketserver并发 一、粘包现象解决方案 1.发送数据大小 有了上一…