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

55 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第3天,下面跟我一起看看青训营第三天讲了什么吧~

今天主要介绍的是Javascript的基础内容,对于我这样的小白有些地方还是比较难理解。

1.写好Javscript的基本原则

  • 各司其职
  • 组件封装
  • 过程抽象

2.深夜食堂调整样式得到的启示

  • 避免使用不必要的由JS直接操作样式
  • 可以使用class表示状态

3.组件:WEB页面上包括HTML(模板)、功能(JS)和样式(CSS)的单元

好的组件应该具有封装性、正确性、扩展性、复用性

4.一个轮播图的组成

  1. 结构:用无序列表(ul)来实现(HTML)
  2. 表现:用绝对定位将图片重叠到同一个位置;切换使用修饰符(CSS)
  3. 行为:API设计要保持原子操作(JS)

5.组件封装(实现组建的步骤)

  1. 结构设计
  2. 展示效果
  3. 行为设计:包括API(功能)和EVENT(控制流)两部分

6.三次重构

  1. 插件化:解耦:把控制元素抽取成插件;插件和组件通过依赖注入建立关系
  2. 模板化:HTML模板化,更容易拓展
  3. 抽象化:将通用的组件模型抽象出来

7.过程抽象:用来处理局部细节控制的一些方法

  1. 一个形象的比喻:我们把函数看成一个输入和输出的盒子,我们可以去做函数过程本身的抽象来解决通用性问题。我们可以把过程抽象想象成一个房间,房间的门、窗和房间本身都是数据,但是我们开门、开窗这个动作是一个过程,过程抽象也就是将开门、开窗的动作抽象。
  2. 比如我们要处理这样的一个问题:不管单击多少次,都只执行以此,这个时候我们就可以用到once函数
function once(fn) {
return function(...args) {
if(fn) {
    const ret = fn.apply(this, args);
fn = null;
return ret;
}
}
}

buttons.forEach((button)=>{
    button.addEventListener('click', once((evt) => {
    const target = evt.target;
target.parentNode.className = 'completed';
setTimeout(()=>{
    list.removeChild(target.parentNode);
},2000);
}))
});

由此我们可以引入高阶函数的概念: 高阶函数以函数作为参数和返回值,once函数就是一个典型的高阶函数。常见的高阶函数包括once函数,Throttle函数(节流函数),Debounce函数(防抖函数)等。

8.为什么我们要使用高阶函数而不是普通函数呢?

  • 纯函数:无状态,结果唯一确定,比如高阶函数

  • 非纯函数:有状态,调用次序/时间不同,得到的结果就不同 纯函数本身结果可控,且更易于测试。因此我们应在实践中,利用高阶函数(纯函数)减少非纯函数的使用,从而增加系统的稳定性和可靠性。