JS初学 | 青训营笔记

122 阅读3分钟

标题:「跟着月影学 JavaScript 」第四届字节跳动青训营 - 前端专场

网址:live.juejin.cn/4354/yc_Jav…

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

1、写好JS的一些原则

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

各司其责

  • 让HTML、CSS和JavaScript职能分离
  • 应当避免不必要的由JS直接操作样式
  • 可以用class来表示状态
  • 纯展示类交互求零JS方案
解耦
  • 将控制元素抽取成插件
  • 插件与组件之间通过依赖注入的方式建立联系

组件封装

  • 好的UI组件具备正确性、扩展性、复用性
  • 基本方法:结构设计 -> 展现效果 -> 行为设计(功能和控制流)
  • 重构
    • 插件化
    • 模块化
    • 抽象化(组件框架)

过程抽象

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

2、高阶函数

1、HOF

  • 以函数作为参数
  • 以函数作为返回值
  • 常用于作为函数装饰器
function HOF0(fn) {
    return function(...args) {
        return fn.apply(this,args);
    }
}

2、常用高阶函数

  • Once
  • Throttle
  • Debounce
  • Consumer
  • Iterative

3、Once

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

4、Throttle 节流函数

函数节流指的是某个函数在一定时间间隔内(例如 3 秒)只执行一次,在这 3 秒内 无视后来产生的函数调用请求,也不会延长时间间隔。3 秒间隔结束后第一次遇到新的函数调用会触发执行,然后在这新的 3 秒内依旧无视后来产生的函数调用请求,以此类推。

const throttle = (fn, wait) => {
	// 上一次执行该函数的时间
  let previous = 0
  return function(...args) {
    console.log(previous)
    ...
  }
}

5、Debounce 防抖函数

防抖函数 debounce 指的是某个函数在某段时间内,无论触发了多少次回调都只执行最后一次。假如我们设置了一个等待时间 3 秒的函数,在这 3 秒内如果遇到函数调用请求就重新计时 3 秒,直至新的 3 秒内没有函数调用请求,此时执行函数,不然就以此类推重新计时。

6、Iterative函数

定义迭代器函数,这样我们就可以将一个操作函数包装成可以迭代使用的操作

1a05750650b50e02d197bd3981978645.png

为什么要使用高阶函数呢,在解决这个问题之前,我们先来学习纯函数的概念。

一个严格的纯函数,是具有确定性无副作用幂等的特点。也就是说,纯函数不依赖外部环境,也不改变外部环境,不管调用几次,不管什么时候调用,只要参数确定,返回值就确定。这样的函数,就是纯函数。

3、编程范式

b8a481a31ce6bb3cbd761c20a7c82ea5.png

命令式

switcher.onclick = function(evt){
  if(evt.target.className === 'on'){
    evt.target.className = 'off';
  }else{
    evt.target.className = 'on';
  }
}

function toggle(...actions){
  return function(...args){
    let action = actions.shift();
    actions.push(action);
    return action.apply(this, args);
  }
}

switcher.onclick = toggle(
  evt => evt.target.className = 'off',
  evt => evt.target.className = 'on'
);