【字节前端-语言篇】如何写好JavaScript | 豆包MarsCode AI刷题

68 阅读3分钟

1. 各司其职

  1. 在JS里面不要直接控制CSS
  2. 可以使用class来表示状态
  3. 甚至可以省略JS,使用CSS高级功能,伪类选择器来控制样式

2. 组件封装

  1. 组件是web页面上抽出来的一个个包含模板,功能和样式的单元,好的组件具备封装性正确性扩展性复用性

  2. 例子

    1.轮播图

    1. HTML(结构设计) 是一个无序列表的结构
    2. CSS(展示效果)
      1. 使用CSS绝对定位将图片重叠在同一个位置
      2. 轮播图切换状态使用修饰符
      3. 轮播图的切换动画使用CSS transition
    3. JS 控制切换的行为(行为设计)
      1. getSelectedItem() 获取当前选中的项
      2. getSelectedItemIndex() 获取当前选中项的索引(位置),通常返回一个数字,表示当前选中的项在列表中的位置。
      3. slideTo() 让滑动组件跳转到指定的项或者位置
      4. slideNext() 使滑动组件向前滑动到下一个项
      5. slidePrevious() 使滑动组件向前滑动到上一个项
      6. Event(自定义事件) 控制流

3. 三次重构

  1. 插件化(功能都在一个个插件里,不要哪个功能注释掉就行,但是存在问题,组件的结构还是在HTML中,需要手动注释HTML结构)
  2. 模板化(将生成HTML结构的代码也放到插件里)
  3. 抽象为通用组件

4. 过程抽象

  1. 用来处理局部细节控制的一些方法
  2. 函数式编程思想的基础应用

5. 过程抽象的例子

  1. 任务列表勾选消除 1.为了保证函数只被调用一次,可以使用高阶函数,调用的是高阶函数返回的那个函数,调用一次以后将fn设置为null,便不会再调用fn

    image.png

    2.高阶函数:1.以函数为参数,2.以函数为返回值,3.常用于作为函数装饰器 3.常用的高阶函数 1. Once 一次性函数 2. Throttle 节流函数(鼠标移动,页面滚动) image.png 3. Debounce 防抖函数(自动保存)

    image.png 4. Consumer / 2 延时调用效果

image.png 5. Iterative 可迭代方法(可迭代就每个都调用一次,不可迭代就只调用一次)

image.png

6. 纯函数

行为是没有副作用的,结果是可预测的;正确性很好测试;在库里尽量使用纯函数

7. 非纯函数

会改变外部状态,测试要构造出特定的外部环境

8. 命令式和声明式编程语言

命令式强调过程,声明式更加简洁,声明式天然具有更好的拓展性

9. JavaScript 代码质量优化之路

  1. 例子 1.交通灯循环状态切换 1.方法1(setTimeOut嵌套切换)

image.png 2.方法2(数据抽象)

image.png 3.方法3(过程抽象)

image.png 4.方法4(异步+函数式)

image.png 2.判断是否是4的幂 1.方法1(循环判断是否/=4为1)

image.png 2.方法2(位操作)

image.png 3.方法3(自己与自己-1,再与0xAAAAAAAAAAAAA)

image.png 4.方法4(使用正则,1后面有若干2个0,则是4的幂)

image.png 3.洗牌 1.思路:在牌中抽一张牌出来放到最后的位置,然后该牌的位置不动,再在剩下的牌里抽一张牌放到最后的位置,直到只剩一张牌

image.png 2.思路:使用生成器,不用跑完全部牌 4.分红包 1.切西瓜法(每次都切最大的那部分,但这样分出来的红包比较均匀,不刺激)

image.png 2.抽牌法

image.png