![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
手撕系列
文章平均质量分 78
AC_uv
好菜好菜好菜
展开
-
函数柯里化
可以一次传很多参数给curry函数,也可以分多次传递,curry函数每次都会返回一个函数去处理剩下的参数,一直到返回最后的结果。用闭包的原理,将每次传递进来的参数存起来,当参数不符合预期时,返回一个新的函数接收剩余参数,继续调用,不符合则再递归。原创 2023-03-02 14:41:10 · 71 阅读 · 0 评论 -
手撕vue2响应式
本篇主要剖析监听原理,没有详细的收集依赖逻辑,这个有待后续补充。对于普通属性来说正常对于对象里面增添属性:可见并不是响应式移除也是一样的:delete会把其getter与setter都删掉可以看出对于增添的属性不具备响应式对于嵌套对象与数组:对其的修改setter根本没法捕获,都只触发外层的get注意,defineProperty本身可以监听数组的变化,只不过由于性能问题,没采用罢了其实只用在定义响应式函数defineReactive中增添一个递归嵌套可以看到这样就能解决嵌套对象原创 2022-11-09 20:27:20 · 734 阅读 · 0 评论 -
手撕深浅拷贝与优化
如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。(新旧对象共享同一块内存),所以如果其中一个对象改变了这个地址,就会影响到另一个对象(只是拷贝了指针,使得两个指针指向同一个地址,这样在对象块结束,调用函数析构的时,会造成同一份资源析构2次,即delete同一块内存2次,造成程序崩溃);也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是。如果属性是基本类型,拷贝的就是基本类型的值。原创 2022-10-27 21:31:11 · 328 阅读 · 0 评论 -
手撕防抖节流(含原理与应用场景,以及为什么加apply)
由于setTimeout函数的时间参数存在误差(或者说执行函数本身所需要的时间),所以打印的结果后三位不一定是我们期望的数值。节流函数除了利用定时器的方式,也可以利用时间戳的方式。如单位时间内多次触发函数,也只有第一次生效,相比防抖缺少了clearTimeout这一步骤,而是通过if语句判断。不改变的话出大问题,不改变的话指向undefined(严格模式下没有调用者时,this的值为undefined),加上apply后才指向实例。事件被触发后延迟n秒再执行回调,如果在这n秒内又被触发,则重新计时。原创 2022-10-27 17:19:55 · 1028 阅读 · 3 评论