跟着月影学 JavaScript(上) | 青训营笔记

122 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第3天。

今天上午主要讲的怎么去规范代码怎么去写好js,内容比较多,满满的干货,我们分上下两部分来消化一下。

一、本堂课重点内容:

  • 在前端三剑客中都负责什么
  • 怎样优化JS代码,让代码更加优雅

二、详细知识点介绍:

写好JS的三大原则

各司其责

要怎么理解各司其责呢,我们先来看看月影老师给的小案例吧。

  • 这是一个切换深色模式的小案例,这也是我们实现的第一种方式。

  • 以下是我们实现功能的第二种方式。相对于第一种方式我们没有去操纵DOM元素,而只改变了其class名字,这种方式是非常有效率的方式,因为我频繁的去操作DOM会导致页面频繁的重排重绘,我们可以利用这种方式合并操作来减少重排重绘的次数,从而提升效率。

  • 以下是我们实现功能的第二种方式,我们可以看到我们并没有去操作DOM元素,效果的实现就是靠CSS去实现。这就是我们开头要说的就是各司其责。

让HTML、CSS和JavaScript职能分离,避免不必要的由JS直接操作样式。
可以用Class来表达状态。
纯展示类交互寻求零JS方案。

组件封装

组件是指Web页面上抽出来一个个包含模版(HTML)、功能(JS)和样式(CSS)的单元。好的组件具备封装性、正确性、扩展性、复用性。

同样我们利用月影老师的案例来引入今天的知识点。这是一个轮播图的案例:

结构:HTML 轮播图是一个典型的列表结构,我们可以使用无序列表ul元素来实现。

表现:CSS ① 使用 CSS 绝对定位将图片重叠在同一个位置 ② 轮播图切换的状态使用修饰符(modifier)③ 轮播图的切换动画使用 CSS transition

行为:JS 使用自定义事件来解耦。

优化组件封

  • 插件化:将控制元素抽取成插件、插件与组件之间通过依赖注入方式建立联系。
  • 模板化:将HTML模板化,更易于kuoz。
  • 抽象化(组件框架):将组件通用模型抽象出来。

过程抽象

过程首抽象我们可以理解为:为了能够让只执行一次的需求覆盖不同的事件处理,我们可以将这个需求剥离出来。这个过程我们称为过程抽象。

  • 用来处理局部细节控制的一些方法
  • 函数式编程思想的基础应用

三、课后个人总结:

影响最深的还是老师讲的各司其责,“深夜食堂”的案例我第一反应就是直接通过JS来操作DOM,方便又快捷。月影老师也是一语道破,确实我也是我们值得去思考的问题,我实现一个效果是一回事,但是你要考虑到后期更改代码的一些成本问题,说白了就是学会了优雅写代码的思想,太优雅了!