这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
本课重点内容
本课主要以实践为主,没有讲太多语法、知识型
主要看了四个实践的内容
课程实践体会
代码关注点
- 风格
- 效率
- 场景
- 约定
- 设计
要朝着代码更加简介、效率更加提升的方向来学习更好的写好JS
交通灯案例
需求:实现一个切换多个交通灯状态切换的功能
版本一:嵌套settimeout
繁杂、回调地狱、代码可读性差!
版本二:分离数据和行为
将整个状态以对象数组statelist的形式展现出来,很好的集成了每一个状态的数据特征,形成了数据统一
利用stateIdx来循环处理,标示三种灯的状态,实现数据和行为的分离
版本三:完全分离数据和行为和样式
这样的代码可读性高,通过改变class来改变样式。思路和版本二差不多,但更加具有逻辑性
版本四:使用promise和async
使用ES6的高级语法特性来写,代码更加简洁,可读性高,样式仍然由class设定,定时器设置更加简单了。
判断是否是四的幂
这是一道青训营的笔试编程题
版本一:
简单的代码,可读性非常高
版本二:
使用了按位与,感觉需要一点点数学思考了
版本三&四:需要很高的数学逻辑了,虽然代码简单,但是可读性不是很高,个人还是喜欢版本一
洗牌
错误写法:
初看这个,感觉非常正确的hhh
但是实际上,号码越小其被抽到的概率越大,分布并不均匀!
sort方法的随机交换不是随机交换
正确写法:
随机先抽一张牌,先换到最后面的位置,再从剩下的牌随机抽一张,放到最后的牌。可以确保每张牌放在任何一个位置是均等的