这是我参与「第五届青训营」伴学笔记创作活动的第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个分隔符)