这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
JavaScript课程笔记(上)
一、重点内容
- JavaScript 好代码的标准
- HTML/CSS/JS 各司其责
- 组件的定义解析及特征
- 组件封装基本方法
- 利用原生 JS 实现电商网站轮播图
- 过程抽象概念
- 高阶函数使用模式
- JavaScript 编程范式
二、详细知识点
1、写好JS的编码原则
-
各司其责
让HTML、CSS和JavaScript职能分离
-
组件封装
好的UI组件具备正确性、扩展性、复用性
-
过程抽象
应用函数式编程思想
2、各司其责
- 应当避免不必要的由JS直接操作样式
- 可以用class来表示状态
- 纯展示类交互寻求JS方案
3、组件封装
(1)概念
组件是指web页面上抽离出来的一个个包含模板、功能和样式的单元,好的组件具备封装性、正确性、拓展性、复用性。
(2)组件设计的原则:
封装性、正确性、拓展性、复用性。
(3)实现组件的步骤:
- 结构设计
- 展现效果
- 行为设计
(4)三次重构
- 插件化
- 模板化
- 抽象化
3、过程抽象
(1)过程抽象
- 用来处理局部细节控制的一些方法。
- 函数式编程思想的基础应用。
- React Hooks典型过程抽象
(2)高阶函数
等价函数 函数的参数和函数的返回值任何状态下都是一样的
高阶函数 在等价函数基础上,改变了某些参数或返回值,或其他修改
- 以函数作为参数
- 以函数作为返回值
- 常用于作为函数装饰器
(3)一些常用的高阶函数
① Once
- 如果在同一个任务的选项框 连续快速点击多次,会出现错误,提示已经移除
- 这里添加{once: true},事件就会只触发一次,不会出现错误
- 类似这样多个请求,只调用一次。可以将过程封装成once过程抽象(高阶函数)
② Throttle
- 节流函数(Underscore、lodash等类库也有节流函数)
- 应用场景: 鼠标移动mousemove事件、页面滚动scroll
③ Debounce
- 防抖函数
- 应用场景: 自动保存,等编辑完成之后才会保存,正在编辑中时不保存
④ Consumer
- 延时调用
- 每隔一个时间才会调用function
⑤ Iterative
- 可迭代方法
- 同时操作多个元素
- 可迭代的话,就调用函数if isIterable里面的方法;不可迭代就调用if之外的,只调用一次。
(4)编程范式
-
命令式:面向过程、面向对象
当多了一个其他的状态时,需要修改函数内部的代码。
-
声明式:逻辑式、函数式。声明式代码更简洁
当多了一个其他的状态时。只需要将状态多写一个即可,具有更强的可扩展性
5、纯函数:无状态幂等函数
(1)纯函数
- 任何状态下,输入a,输出的一定是b
- 没有副作用,行为可预期
(2)非纯函数
非纯函数的测试,需要init()、setup()进行初始化,结束后环境销毁teardown(); 测试难度比纯函数高、成本也大、系统维护性越差
三、实践练习
1、白天夜间模式切换
深夜食堂
2、轮播图
四、个人总结
- SetColor和SetColors都是非纯函数
- 尽可能在编写过程中使用纯函数(例如高阶函数)
- 抽象包括两个方面,一是过程抽象,二是数据抽象。