JavaScript| 青训营笔记

74 阅读2分钟

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

本堂课重点内容

  1. JavaScript 好代码的标准

    1. 各司其责(HTML/CSS/JS功能独立)
    2. 组件封装
    3. 过程抽象
  2. 评定代码逻辑好坏

    风格,效率,约定,使用场景,设计

重点知识点介绍

各司其责
  1. 避免不必要的有JS直接操作样式

    下面的例子使用JavaScript直接操作DOM来控制元素,应当避免

const btn = document.getElementById('modeBtn');
btn.addEventListener('click', (e) => {
  const body = document.body;
  if(e.target.innerHTML === '🌞') {
    body.style.backgroundColor = 'black';
    body.style.color = 'white';
    e.target.innerHTML = '🌜';
  } else {
    body.style.backgroundColor = 'white';
    body.style.color = 'black';
    e.target.innerHTML = '🌞';
  }
});
  1. 可以用JS控制类来切换状态

    下面的例子通过类来判断状态并实现样式切换,🦾

const btn = document.getElementById('modeBtn');
btn.addEventListener('click', (e) => {
  const body = document.body;
  if(body.className !== 'night') {
    body.className = 'night';
  } else {
    body.className = '';
  }
});
  1. 纯展示类交互寻求零JS方案

    下面的例子直接通过HTML和CSS来实现状态切换,通过使用伪元素选择器避免了使用JS,👍

<body>
  <input id="modeCheckBox" type="checkbox">
  <div class="content">
    <header>
      <label id="modeBtn" for="modeCheckBox"></label>
      <h1>深夜食堂</h1>
    </header>
    <main>
      <div class="pic">
        <img src="https://p2.ssl.qhimg.com/t0120cc20854dc91c1e.jpg">
      </div>
      <div class="description">
        <p>文字</p>
      </div>
    </main>
  </div>
</body>
#modeCheckBox {
  display: none;
}
#modeCheckBox:checked + .content {
  background-color: black;
  color: white;
  transition: all 1s;
}
#modeBtn {
  font-size: 2rem;
  float: right;
}
#modeBtn::after {
  content: '🌞';
}
#modeCheckBox:checked + .content #modeBtn::after {
  content: '🌜';
}
组件封装

结构设计→展现效果→行为设计

在行为设计也就是JavaScript负责的部分,用API提供功能,用Event控制流

组件封装可以考虑重构,插件化、模板化和抽象化(组件框架)

具体例子见PPT

过程抽象
高阶函数

JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

常见的高阶函数有map(),filter(),reduce(),sort()等

我们可以将各种需求剥离出来,这个过程称为抽象化,然后使用高阶函数实现该抽象出来的需求

代码实践
  1. 交通灯
  2. 判断是否是4的幂
  3. 洗牌
  4. 拆红包

具体例子见PPT

课后个人总结

月影老师的课主要讲JavaScript的各种规范和优化,很多都是我之前从未思考过的东西。以前写的JavaScript代码总是想着“能跑就行”,在听了月影老师的四节课后,我对JavaScript的理解和追求有所改变。

引用参考

⁣‍⁤‍‍‬⁢⁤‬⁡⁤‍⁢⁣⁣⁣‬‍‍‬‌⁤‌⁤‌‌‬⁤⁤⁡‬‍⁣Javascript规范

‌⁢‌⁣‍‌⁢‬⁢‌⁡⁤‍‍‬⁡‌‬⁣‬⁢⁡‌‍⁢‍⁣‍⁤⁢‍‌⁡⁤JavaScript优化