JavaScript 编码原则(上篇) 青训营打卡day6 | 豆包MarsCode AI刷题

127 阅读3分钟

前情提要

今天是字节青训营打卡的第七天,本文主要讲述JS代码的编码原则,让我们知道如何写出高质量的JS代码

如何写好js代码

编写高质量的 JavaScript 代码是每个前端开发者的追求。那么我们应该如何写好JS的代码呢?

1. 各司其职(Separation of Concerns)

各司其职(Separation of Concerns,SoC)是一种设计原则,强调将一个复杂系统分解成多个独立的部分,每个部分负责处理特定的任务或关注点。这种分解有助于提高代码的可读性、可维护性和可扩展性。

优点
  • 模块化:每个部分都是独立的,可以单独开发、测试和维护。
  • 可重用性:独立的模块可以在不同的项目或上下文中重用。
  • 可维护性:修改一个部分不会影响其他部分,减少了代码的耦合度。
  • 可扩展性:新增功能时,可以轻松地添加新的模块,而不必修改现有代码。
示例

在一个典型的 Web 应用中,可以将关注点分为以下几个部分:

  • HTML:负责页面的结构。
  • CSS:负责页面的样式。
  • JavaScript:负责页面的交互逻辑。

2. 组件封装(Component Encapsulation)

组件封装是指将一组相关的功能和数据封装成一个独立的单元,这个单元可以被其他部分复用。组件封装是现代前端框架(如 React、Vue、Angular)的核心概念之一。

优点
  • 复用性:组件可以在不同的地方和不同的项目中复用。
  • 可测试性:组件可以独立地进行单元测试。
  • 可维护性:组件内部的逻辑和数据是隔离的,修改一个组件不会影响其他组件。
  • 可组合性:组件可以组合成更复杂的界面。

3. 过程抽象(Procedural Abstraction)

过程抽象是指将一组相关的操作封装成一个函数或方法,这样可以隐藏具体的实现细节,只暴露必要的接口。过程抽象是函数式编程的基础,也是提高代码可读性和可维护性的关键。

优点
  • 可读性:通过函数名可以直观地了解其功能。
  • 可重用性:同一个函数可以在不同的地方调用。
  • 可测试性:函数可以独立地进行单元测试。
  • 可维护性:修改函数的实现不会影响调用者。

image.png image.png

举个栗子

image.png

直接用js去控制css内置属性来实现

代码如下所示

image.png

思考

这段代码为啥不好呢? 因为切换样式是css该干的事情,却让js来做了! 程序的耦合度增加了

解决方案

我们完全可以不需要使用js来切换样式, 只需要html和css即可实现

HTML

<body>
  <input id="modeCheckBox" type="checkbox">
  <div class="content">
    <header>
      <label id="modeBtn" for="modeCheckBox"></label>
      <h1>深夜食堂</h1>
    </header>
    <main>
      ...
    </main>
  </div>
</body>

在这段 HTML 代码中,我们有一个名为 modeCheckBox 的复选框输入元素,以及一个包含标题 <h1> 和主内容区域 <main>.content 分区。标签 <label> 元素与复选框关联,以便用户可以通过点击标签来触发复选框的变化。

CSS 代码

#modeCheckBox:checked + .content {
  background-color: black;
  color: white;
  transition: all 1s;
}

这段 CSS 代码定义了当 modeCheckBox 复选框被选中时,.content 分区的背景色变为黑色,文字颜色变为白色,并且所有过渡效果持续时间为 1 秒。这里使用了伪类 :checked 来检查复选框是否被选中,以及相邻兄弟选择器 + 来选择紧随其后的 .content 分区。

工作原理

当用户勾选 modeCheckBox 复选框时,浏览器会自动为该复选框添加 :checked 伪类。由于 CSS 规则指定了 #modeCheckBox:checked + .content,因此 .content 分区会被选中并应用相应的样式规则。结果就是页面的主题从默认样式切换到暗黑模式。