JS | 青训营笔记

117 阅读3分钟

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

本堂课重点(不熟悉)内容:

鼓励使用高阶函数

各司其职(HTML、CSS、JS的职能分离)

  1. 犀牛书、红宝书
  2. 结构、表现、行为分离 不要让js做css该做的事情 避免不必要的由JS直接操作的代码
  3. 伪类的高级应用:css纯样式改变 纯展示类交互雪球零JS方案 eg.深夜食堂 版本3
  4. 可以用class表示状态

组件封装(好的UI组件具备封装性、正确性、扩展性、复用性)

例子:原生JS实现一个电商网站的轮播图

  1. 无序列表展示图片
  2. CSS定位同一位置
  3. 定义一个类,实现 轮播图功能的API
  4. 自定义事件 实现下方红点和左右箭头

总结:

  1. 结构设计
  2. 展示效果
  3. 行为涉及
    • API 功能
    • Event 控制流

重构:插件化(再精进的点)

解耦:

  • 将控制元素抽取为插件
  • 插件与组件之间通过依赖注入方式建立联系

重构:模板化

实现修改少部分内容,不需要理解更深层次的内容 即可修改成功

重构:过程抽象

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

常用高阶函数

  • HOF
    • Once
    • Throttle 截留函数 设置 x ms, 只能每 x 毫秒点击一次 (底部思维是 在规定时间内的第一次走第一个分支,其他次走另一个分支)
    • Debounce 防抖
    • Consumer 矩阵、延时调用
    • Iterative 传入为可迭代对象,用该对象去调用统一方法

Leftpad故事引入

推荐使用repeat进行添加 固定值 二次幂快速添加的算法 log2(n)

先将个数转化为二进制 result初始为*

  1. 5->101 余二=1 -> 添加** result = ***
  2. 101->10 余二=0
  3. 10->1 余二=1 -> 添加** result = *****

代码质量

交通灯

LeeCode

四的幂

num 与 num-1 相与 得值 二进制少一个1 64位 11位的小数位 剩下53位 需要对应位数的A

  1. 2的幂 num>0 & num & (num-1) === 0
  2. 4的幂 num>0 & num & (num-1) === 0 & num & 0xAAAAAAAAAAA === 0

洗牌

避免分布不均匀

sort方法的随机交换 在每个的交换的概率不一样 前面的要换到后面的概率要低 导致前面的数时小数多

分红包-切西瓜

分两半 挑大的部分再分

分红包-抽牌法

抽到每个数的概率相等 但是空间复杂度高

详细知识点介绍:

总结:

  • 组件设计的原则:封装性、正确性、扩展性、复用性
  • 实现组件的步骤:结构设计、展现效果、行为设计
  • 三次重构
    • 插件化
    • 模板化
    • 抽象化(组件框架)
  • 命令式编程语言
  • 声明式编程语言 (多个状态转换时推荐
  • 模块粒度

引用参考:

PPT:

bytedance.feishu.cn/file/boxcnx… bytedance.feishu.cn/file/boxcnD…