JS进阶 | 青训营笔记

60 阅读2分钟

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

本课重点内容

本课主要以实践为主,没有讲太多语法、知识型

主要看了四个实践的内容

课程实践体会

代码关注点

  • 风格
  • 效率
  • 场景
  • 约定
  • 设计

要朝着代码更加简介、效率更加提升的方向来学习更好的写好JS

交通灯案例

需求:实现一个切换多个交通灯状态切换的功能

版本一:嵌套settimeout

image.png

繁杂、回调地狱、代码可读性差!

版本二:分离数据和行为

image.png

将整个状态以对象数组statelist的形式展现出来,很好的集成了每一个状态的数据特征,形成了数据统一 利用stateIdx来循环处理,标示三种灯的状态,实现数据和行为的分离

版本三:完全分离数据和行为和样式

image.png

这样的代码可读性高,通过改变class来改变样式。思路和版本二差不多,但更加具有逻辑性

版本四:使用promise和async

image.png

使用ES6的高级语法特性来写,代码更加简洁,可读性高,样式仍然由class设定,定时器设置更加简单了。

判断是否是四的幂

这是一道青训营的笔试编程题

版本一:

image.png

简单的代码,可读性非常高

版本二:

image.png

使用了按位与,感觉需要一点点数学思考了

版本三&四:需要很高的数学逻辑了,虽然代码简单,但是可读性不是很高,个人还是喜欢版本一

洗牌

错误写法:

image.png

初看这个,感觉非常正确的hhh

但是实际上,号码越小其被抽到的概率越大,分布并不均匀!

sort方法的随机交换不是随机交换

正确写法:

image.png

随机先抽一张牌,先换到最后面的位置,再从剩下的牌随机抽一张,放到最后的牌。可以确保每张牌放在任何一个位置是均等的