跟着月影学 JavaScript | 青训营笔记

81 阅读3分钟

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

一、本堂课重点内容

1.如何写好JavaScript
●各司其职 ●组件封装 ●过程抽象
2.写代码应该关注的要点

二、详细知识点介绍

写好JS的三大原则

🔺各司其职
①让html,css,js职能分离
②避免不必要的由JS直接操作样式
③可以用class来表示状态,使代码具有特定意义,例如使一段代码的需求从“样式改变”转为“黑夜白天浏览效果改变”
④纯展示类交互寻求零JS方案

举例:深夜食堂(黑夜/白天浏览效果)

版本一
image.png
版本二
改进:将样式控制部分交给CSS板块,JS不负责 image.png
版本三
变化:零JS方案,仅有html,css image.png

🔺组件封装
①组件是指Web页面上抽出来一个个包含模板(HTML)、样式(CSS)、功能(JS)的单元
②好的UI组件具备封装性、正确性、拓展性、复用性
③实现组件的步骤:
●结构设计
●展示效果
●行为设计:API(功能)、Event(控制流)

④三次重构:
●插件化:【解耦】将控制元素抽取成插件,插件与组件之间通过依赖注入方式建立联系
●模板化:【解耦】将HTML模板化,更容易拓展
●抽象化(组件框架):将通用的组件模型抽象出来

🔺过程抽象
①用来处理局部细节控制的一些方法
②应用函数式编程思想
③鼓励使用高阶函数
⭕纯函数:一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,输出是可预期的。例如add(4,5)必定输出9
⭕非纯函数:执行时会产生副作用,修改了外部传进来的对象
⭕高阶函数HOF:以函数作为参数,以函数作为返回值,常用于作为函数修饰器

综上,可以使用高阶函数将非纯函数构建成纯函数,使程序的测试、调试更方便且具有可预期性,使程序的执行过程尽可能减少副作用,减少对外部的影响。

④常用的高阶函数:Once,Throttle,Debounce,Consumer,Iterative
⑤编程范式:命令式(面向过程/面向对象)与声明式(逻辑/函数)

image.png

JS作为一种现代编程语言,编程范式是复合的,既可以写出命令式风格的代码(怎么实现?),也可以写声明式风格的(实现什么?)。

举例:声明式与命令式的区别

⭕实现效果:鼠标点击转换状态

image.png image.png

⭕命令式 image.png

⭕声明式:用了高阶函数 image.png

⭕思考:如果有更多的状态需要转换呢?哪种风格更便于拓展? image.png
> 如图,用的是声明式,只需要添加红色框的代码,很容易就能添加新的状态"warn"
> 但是如果使用命令式,JS部分需要增加新的if分支语句,同时CSS需要增加新的状态样式。显而易见,假如状态太多的时候,使用命令式是非常麻烦的。

三、总结

●过程抽象/HOF/装饰器
●命令式/声明式