JavaScript学习 | 青训营笔记

67 阅读2分钟

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


一.JavaScript编写原则
  • 各司其职(实例:白天和夜晚模式切换)
    • 应当避免不必要的由JS直接操作样式
    • 用class表示状态
    • 纯展示类交互寻求零JS方案
  • 组件封装(实例:图片轮播)
    • 实现步骤:结构设计,展示效果,行为设计
    • 三次重构:插件化,模板化,抽象化(组件框架)
  • 过程抽象(处理局部细节)
    • 高阶函数(变量状态不变,once,防抖)、纯函数与非纯函数
    • 命令式与申明式

二.编码优化

关注使用场景
前端依旧需要学算法,打好基础
Leftpad事件:在具体使用场景下性能提升效果可以忽略,更应该关注代码的可读性
快速幂:每一步把指数分成两半,相应的底数做平方运算,以达到减小指数和循环次数的目的。用为运算可以进行优化。


三.JS代码优化

交通灯:

  • 数据抽象:颜色,时间、定义方法开始颜色切换
  • 过程抽象:等待、轮询(代码复杂,拓展性好)

四的幂:

  • 循环模四
  • 按位与(&11,右移动两位继续&)
  • A&(A-1)二进制中1的个数减少一个,一个数为2的倍数二进制里只有一个1,一个数为4的倍数偶数位上必然为0(本方法算法复杂度为1)
//判断能否被4整除
num>0 && (num&(num-1))===0 && (num&0xAAAAAAAAAA)===0)
  • (JS)正则表达式匹配

洗牌:

  • 错误写法(采用sort而概率不等)
[...cards].sort(()=>Math.random()>0.5?-1:1);

分红包: 不能完全随机(最小值约束)

  • 切西瓜法:每次对当前最大值进行拆分(算法复杂度不优,最后结果趋于均匀)
  • 抽牌法:随机抽值排序作为分隔符拆入数列(空间复杂度较高,n个红包选择n-1个分隔符)