JavaScript编码原则:如何写好JS|青训营笔记

56 阅读2分钟

这是我参加[第五届青训营]伴学笔记创作活动的第3天

本堂课的知识点

  • 了解写好JavaScript的编码原则
  • 了解JavaScript如何代码优化的案例和思维
JavaScript入门推荐书目:

《JavaScript权威指南》(又称犀牛书)
《JavaScript高级程序设计》(又称红宝书)

《JavaScript语言精粹》与犀牛书的厚薄,戏言剩下的都是不好的哈哈

各司其责(职能分离)

支持浅色和深色浏览模式-通过class名切换样式而不是通过js中dom更改样式
纯css不涉及js:添加一个隐藏的checkbox的input,通过checkbox的状态判断浅色和深色 image.png

组件封装(UI组件正确性、扩展性、复用性)

eg.轮播图的封装,html是用无序列表展现每一张图片,然后通过css将图片叠加 image.png image.png 最后是轮播图下面的点,通过自定义事件解耦 image.png 解耦:插件化(构造函数function)、模板化(Class)、抽象化(组件框架)

过程抽象(应用函数式编程思想)

eg.完成任务列表(我要做计划app),注意误点的操作,为了节流可通过once函数实现 image.png 常用的高阶函数(HOF):Once、Throttle、Debounce、Consumer、iterative
编程范式:命令式(how怎么做)与声明式(what做什么,易扩展) image.png

代码优化

写代码应该关注:风格,效率,约定,使用场景,设计。依据具体业务分析择一或多个方面,虽然以上都需要关注,但最终还是回归使用场景。

引子

leftpad事件的吐槽点:(功能:前面补0)

因使用场景多而被多个依赖库所引用但作者下架后无法使用的吐槽

  • NPM模块粒度(为何如此简单的代码要设定为一个模块)
  • 代码风格
  • 代码质量/效率
重构代码:

代码更简洁,效率更高,时间复杂度O(N) image.png 在计算大数的时候性能更好,通过repeat和快速幂的形式,时间复杂度O(logN) image.png 另一种方式 image.png 总结:如果针对leftpad的话没有性能优化的必要性,因为目前应用场景是十几和十几的数之间操作,仅此的话三种方式性能差不多,但若考虑其他复杂的话可以以此为思路。

案例1:交通灯
通过递归方式数据抽象封装 image.png 过程抽象 image.png 异步+函数式
感觉这种形式很像编辑单片机时那种最简单最普通的方式 image.png

案例2:判断是否是4的幂(leetcode简单题)
1.取模除数 2.位操作
3.a&(a-1)判断最终是否存在1 image.png 4.判断字符串是否存在 image.png

案例3:洗牌 用sort和random机率不均等 image.png

案例4:红包生成器
切西瓜法
抽牌法(栅栏法)