JS学习笔记

151 阅读4分钟

好多天没写笔记了,趁着有点时间抓紧补一下js笔记咯!!!暑假也不可以松懈啊!
#JS编码原则
——如何写好JavaScript,推荐书籍:右边那个有中文版!
每年都会发布新标准,也需要持续学习下去
==原则:各司其职——让HTMl、CSS、JavaScript职能分离==
深色、浅色互换的功能
版本一!
如果是太阳,点击就把背景换成黑,文字换成白,图标换成月亮
版本二!
操作了HTMl的元素,改变了它的展现样式,而不是第一个版本的控制CSS,这点更好
而这个没有过多复杂的行为,主要就是样式的改变,那么可以不用JS
版本三!
伪类选择器,通过check的状态修改content的样式!
用到了一个for属性,实际上不是那个图标是可点击的,是另一个,然后关联起来再隐藏
结论就是:三大件各司其职,避免JS操作样式,用class表示状态,纯展示类交互寻求零JS方案
==原则:组件封装——好的UI(组件)具备正确性、扩展性、复用性==
组件就是web上抽象出来的模板,比如轮播图,使用原生JS要如何实现
结构:HTML,轮播图是列表结构,可以用ul实现!
此时在网页上显示的就是一列图片——还带小圆点点
表现:CSS,使用绝对定位把他们重叠在一起,切换的状态用修饰符(modifier),切换动画用CSS transition!
前面的名字有一个不一样的,后面多了个selected,有他的就是会显示的那个
行为:JS || 行为:API,要设计API!
第一个是得到当前选中的图片元素,第二个是得到当前选中的图片元素在列表的下标,第三个是到某个特定的元素上,第四个是向后轮播下一张图片,第五个是轮播上一张图片
所以可以弄一个slider的类,然后实现一个API
但是现在底下的小圆点切换还没有,接下来就需要控制流,使用自定义事件来解耦 要把小圆点和图片的状态耦合在一起!
a表示左右,span表示小圆点。在JS中也要进行一下修改,增加一些监听
实现到这里并不复杂。(然而我这还是不会md)但是到此为止?!重构
首先找一下问题:这个组件的各个部分都不怎么灵活
插件化——解耦将控制元素抽取成插件,插件和组件之间通过依赖注入的方式建立联系! 将组件和插件都模板化,就在HTML有个容器,然后剩下的放在JS里来搞!好处就是不想要的时候直接把注册的插件代码注释掉,而且不会影响其他,很灵活了
但是这仍然不一定是优化的终点! 继续抽象下去,不过这没考虑到嵌套!
==原则:过程抽象——应用函数式编程思想==
用来处理局部细节的一些方法、是函数式编程思想的基础应用
input x ->(函数,看成封装好的过程,关注输入和输出) ->output f(x)
前面说的组件化是控制整体的过程UI的
这个过程抽象嘛……比如操作次数限制,异步交互、一次性的请求
如果一个函数返回另一个函数(或者以函数作为参数),这个叫高阶函数!
自己找去吧,第二个是截流函数
为什么要使用高阶函数?
先来看看纯函数! 输入a就输出b ,结果可预期的,没副作用的
非纯太多了系统维护性差
所以鼓励使用高阶函数
——编程范式!
JS既有命令式又有声明式(上图下面那个)
#Left-pad事件
写代码最应该关注使用场景,从此入手!
被重构了!
#JavaScript代码优化
插件、模块、抽象优化!
异步+函数
——————!
实现方法:最直接的一个! or位操作! or!
二进制的话
a & (a-1)会使得a的二进制减少一个1(数学归纳法)
如果是4的幂,二进制会只有一个1,再减去一个1就是0了。
并且偶数位不能是1(右向左)
num&0101010……10 === 0
换成十六进制就是0xAAAAAAAAAAAAAAAA
or把num当成字符串!
转成二进制字符串,然后用正则表达式匹配
——————
洗牌-错误写法:用Math.random!
跑了一百万次的统计结果!
但是却是概率不一样,越小的序号出现在前面的概率越大(这函数实现是通过交换的)
经典的洗牌算法是这样的!(这个是均匀分布的)
洗牌-生成器,之前是跑完循环再返回,现在是直接列出来!
注释是取全部,下面是取一个
分红包-切西瓜伐、抽牌法
不能马上分掉,因为可能出现不够分的情况