JavaScript 编码原则(二)| 青训营笔记

74 阅读2分钟
这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天✌

课堂笔记


本堂课重点内容:

  1. JavaScript 好代码的标准
  2. HTML/CSS/JS 各司其责

详细知识点介绍

3. 过程抽象👌

  • 用来处理局部细节控制
  • 过程抽象是函数思想的基础

image.png

过程抽象过程即可视为函数的输入与输出。

  • 应用举例:

设计一个to do list,完成某项任务后点击该任务前的✅,该任务即消失

bug:

问题:

假设用户手抖多次点击了任务行,会报错:

image.png

原因:

因为点击任务后触发了click事件,多次触发了click事件就会触发定时器setTimout()多次调用removeChild(),就会报错,因为该节点已经被移除了。

解决方案:

使用{once:true}代替定时器设定的时间,保证定时器中的函数只被执行一次。

高阶函数

  • Once

    • 为了能够让“只执行一次”的需求覆盖不同的事件处理,我们将这个需求剥离处理。这个过程我们称为 过程抽离

image.png 如上图:

将房间里的东西抽象成数据,例如门、冰箱、窗户等。 open是个动作,可以复用来操作上述数据。

可以通过高阶函数实现Once()抽象过程。

代码模板:

image.png

  • HOF

    • 以函数作为参数
    • 以函数作为返回值
    • 常用于作为函数装饰器
  • 常用高阶函数

    • Once:让“只执行一次”的需求覆盖不同的事件处理
    • Throttle:节流函数,n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效。
    • Debounce:防抖函数,n 秒后执行该事件,若在 n 秒内被重复触发,则重新计时。
    • Consumer/2
    • Iterative:迭代器,用于批量的操作元素
  • 纯函数: 输入的值是唯一,且输出的值也是唯一

  • 非纯函数: 输入的值不唯一,且输出的值也不唯一

纯函数优点:提高代码的可维护性和可扩展性。

  • 编程范式
    • 命令式
      • 过程式
      • 面向对象
    • 声明式
      • 逻辑式
      • 函数式

image.png

命令式代码风格:

let list = [1, 2, 3, 4];
let map = [];
for (let i = 0; i < list.length; i++) {
    map.push(list[i] * 2);
}

声明式代码风格:

let list = [1, 2, 3, 4];
let map = [];
for (let i = 0; i < list.length; i++) {
    map.push(list[i] * 2);
}

应用实例

  • Toggle 命令式

  • Toggle 声明式

  • Toggle 三态

总结

  • 过程抽象/HOF/装饰器
  • 命令式/生命式

课后个人总结

前端不仅仅是技术代码上的实现,也应该遵守标准的编码原则和思维上的标准规范,才能降低差异性,更利于团队协作。

引用参考

blog.csdn.net/guorui_java…

blog.csdn.net/weixin_4480…blogsobaiduweb~default-3-120303835.article_score_rank_blog&spm=1018.2226.3001.4450