自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 收藏
  • 关注

原创 JS手写代码篇---手写sleep

sleep功能可以通过Promise封装setTimeout实现,用于在代码中引入延迟。该方法接收毫秒参数,在指定时间后resolve Promise,从而支持异步等待。相比直接使用setTimeout,Promise封装提供了更好的可读性、链式调用和错误处理能力,使异步流程更易管理。这种实现方式兼顾了灵活性和代码维护性。

2025-06-12 17:51:16 43

原创 React---Hooks深入

今天学习了React的几个核心Hook:useEffect用于处理副作用操作(如DOM更新、网络请求),可通过返回值实现清除逻辑;useContext简化了Context的值获取;useReducer作为useState的替代方案,适合复杂状态逻辑;useCallback和useMemo则用于性能优化,分别记忆化函数和值。这些Hook极大地简化了React的功能实现方式。

2025-06-12 17:49:17 650

原创 JS手写代码篇---手写深拷贝

今天学习了深拷贝函数的实现,其实深拷贝与浅拷贝最大的不同就是对于嵌套的对象,浅拷贝是直接复制引用,这样的话修改值也会修改原来的值,这就不算是真正的复制了。深拷贝新建了有个对象,这样的话新建的和之前的就是独立的了,做法就是在浅拷贝的基础上面对于嵌套的都西昂进行递归!

2025-06-11 18:58:10 130

原创 React---Hooks初步

React Hooks让函数式组件开发更加简洁高效,解决了this绑定问题。通过useState可以轻松管理组件状态,包括基本数据类型、数组和对象等复杂数据结构。真的太好用了!!!

2025-06-11 18:53:41 33

原创 JS手写代码篇---手写浅拷贝

今天手写了浅拷贝,浅拷贝很简单,就是对浅层的复制,遍历循环判断自身属性就可以了,随之而来的是如果对象的属性是嵌套对象,浅拷贝只会复制引用,而不是新对象。

2025-06-10 17:32:33 339

原创 React---day12

今天学习了react里面的路由,学习了里面的很多API,比如Link,Navlink,Route,我跟的课程版本有点老了,switch变成了routes,redirect变成了navigate,路由的嵌套也发生了很大的变化,摈弃了config的方法

2025-06-10 17:28:58 484

原创 JS手写代码篇----使用Promise封装AJAX请求

Promise封装AJAX请求,和上面的封装ajax大部分相同,就是多了promise自带的resolve和reject函数,这样就不用写成功和失败的回调函数啦!

2025-06-09 19:49:50 289

原创 React---day11

今天有深入了一下redux中的异步请求,因为reducer处理的是同步的action,异步的需要通过中间件将异步action转化为同步action,有两种方案:redux-thunk和redux-saga,它们最大的不同就是耦合性的问题

2025-06-09 19:44:47 730

原创 JS手写代码篇---手写ajax

AJAX请求允许网页异步获取服务器数据而不刷新整个页面。实现步骤包括:创建XMLHttpRequest对象,设置超时和回调函数,监听请求状态,处理网络/超时错误,设置请求头和响应类型后发送请求。示例代码展示了完整的AJAX实现流程:定义成功/失败回调,检查HTTP状态码,处理响应数据或错误信息。该方法通过异步通信提升了用户体验,避免了页面重载。

2025-06-08 22:42:45 401

原创 JS手写代码篇---手写函数柯里化

函数柯里化是将多参数函数转换为单参数链式调用的技术,我写的存在参数收集不完整、逻辑复杂等问题,后面进行了改进判断参数数量决定执行函数或继续收集参数,符合柯里化的通用实现。主要问题包括结构复杂、参数收集不完整、递归使用不当等。改进后的方案通过apply合并参数,实现了更优雅的链式调用。

2025-06-06 18:51:27 252

原创 React---day10

今天把transition学完了,然后学习了一点redux,Redux 是一个用于 JavaScript 应用程序的状态管理库,主要用于解决复杂应用中的状态管理问题。它的核心思想是提供一种可预测的状态管理机制,通过集中式存储(Store)来管理应用的所有状态,从而简化状态更新和组件间的数据共享。

2025-06-06 18:44:53 933

原创 JS手写代码篇---bind手写

今天手写了bind,通过前两天的手写call和apply对于改变this指向我已经是很熟悉了,唯一不同的就是bind返回一个新的函数,函数也是要执行参数的,这一点没有太注意。

2025-06-05 15:44:37 180

原创 React---day9

今天主要学习了react里面的style写法中的styled-components、axios封装、react-transition-group中的CSSTransition,我发现我用的19一般都会有很大的问题,版本不兼容之类的,都要把19的版本修改为18,好头疼!!!

2025-06-05 15:12:39 753

原创 JS手写代码篇---手写apply方法

apply方法允许调用函数时设置this值并以数组形式传递参数,与call方法的主要区别在于参数传递方式。手写实现时需要注意三点:1)验证调用对象是否为函数;2)处理this值为null或undefined的情况;3)对参数数组进行特殊处理,当参数为null/undefined时需单独处理。文中还对比了手写apply和call的区别,指出apply必须对参数数组进行判断,而call则不需要。

2025-06-04 16:52:28 870

原创 React---扩展补充

今天学习了一些拓展内容:React高阶组件、转发ref和Portal,太多内容啦,脑子有时候有点接收不过来,在实际应用的时候要多多使用,写了一下高阶组件的案例,感觉它就是很组件化哈哈哈哈,让代码优雅不少呢!

2025-06-04 16:48:19 529

原创 JS手写代码篇---手写call函数

今天主要手写了call方法:改变函数的 this 指向并立即执行该函数大概思路就是:通过将函数作为对象的方法调用来改变 this 指向手写代码最麻烦的就是有很多的边界需要考虑:- 检查调用者是否为函数- 处理 null/undefined 上下文的情况- 确保不污染传入的对象

2025-06-03 17:13:54 247

原创 React---day8

今天主要学习了不可变数据、全局事件传递和受控组件。在不可变数据部分,强调不能直接修改state,推荐使用新数组替代原数组来维护数据不可变性。通过EventEmitter实现跨组件事件通信,也直接敲了事件监听与触发的完整流程。最后学习了受控组件的实现方式,即表单元素值由React state控制。

2025-06-03 17:10:17 618

原创 JS手写代码篇---手写类型判断函数

先使用typeof判断输入对象的类型,如果是值类型就直接返回typeof识别到的类型,如果不是就要使用Object.prototype.toString.call()返回表示对象类型的字符串。

2025-06-02 21:36:01 189

原创 React---day6、7

这两天学习了组件通信、slot插槽、setState的源码、React的更新流程以及优化。

2025-06-02 17:50:24 840

原创 JS手写代码篇---手写节流函数

节流函数是一种性能优化技术,它控制函数在指定时间间隔内只能执行一次。与防抖函数延迟执行不同,节流函数直接限制执行频率。示例代码通过记录上一次执行时间,确保在等待时间内不再重复执行。适用于滚动事件等高频触发的场景。防抖则更适合如搜索输入框等需要等待用户停止输入的场景。

2025-05-30 22:51:39 609

原创 React---day5

React组件分为函数组件和类组件,依据状态可分为无状态和有状态组件,按职责分为展示型和容器型组件。React生命周期包括挂载(Mount)、更新(Update)和卸载(Unmount)阶段,关键方法如componentDidMount、componentDidUpdate和componentWillUnmount分别处理初始加载、更新和清理逻辑。组件间数据传递主要通过props实现父传子通信。

2025-05-30 22:49:45 1225

原创 JS手写代码篇---手写防抖函数

今天手写了防抖函数,很喜欢上电梯这个例子,会让整个代码变得通俗易懂

2025-05-29 11:29:09 171

原创 React---day4

今天学习了一下react的脚手架,有了脚手架还是会轻松很多噢,但是我发现我的react版本太新了何老师的很多都不一样,看来之后需要ai加文档学习了。

2025-05-29 11:26:03 771

原创 JS手写代码篇---Pomise.race

今天学习了手写promise.race,和promise.all嘴不停的就是他是只要有应该promise结束就要返回了,所以和all也有很大的不一样。哦哦哦~学到了一个小tips,Promise.resolve可以将每个元素转换为Promise,以处理非Promise的情况。

2025-05-28 15:47:49 624

原创 React---day3

今天学习了jsx的本质,之前我一直阶段学习本质没有什么必要,但是我发现学习完底层原理之后写代码会清晰很多。然后今天还进行了应该阶段小练习,也是写了很久,也深深明白了setState里面是不允许改变原有的数据的,还有就是调用函数哪一个地方,真的是深有感悟,一辈子都记得了哈哈哈哈哈

2025-05-28 15:44:38 568

原创 JS手写代码篇---手写promise.all

promise.all方法主要是处理多个异步的调用问题,传入一个数组,返回的是新的promise对象,它是静态方式。所以传入数组后我们循环遍历了这个数组,如果它是普通值,如果是就要直接添加到结果数组里卖弄,如果不是,then等待结果,只要有一个错误,那么就直接reject,最后当结果数组的长度和传入数组的长度相同的时候就要resolve啦~~

2025-05-27 23:01:13 336

原创 React---day2

嗨嗨嗨!!!从南京gap回来啦,南京真的是很美很有历史底蕴的城市呢,好想再去一次哈哈。今天主要学了一些jsx的核心语法,和vue有一些相似也有很多不同。主要讲了嵌入、绑定以及渲染三个方面,具体在下方,明天也要继续加油!!!

2025-05-27 14:18:35 767

原创 React---day1

啦啦,今天对react有了一点点新的认识捏,从react的基本框架到绑定数据最后再到编写函数改变数据的值,让我一步一步揭开react的面纱,它的语法确实要灵活很多,组件化也体现了出来,很期待接下来的学习内容。

2025-05-21 20:52:26 705

原创 JS手写代码篇---手写Promise

手写 Promise 的核心在于实现状态管理、异步回调和链式调用。首先,Promise 有三种状态(pending/fulfilled/rejected),通过构造函数接收执行器函数,并用 `resolve` 和 `reject` 更新状态。

2025-05-21 20:50:09 760

原创 力扣算法---哈希表总结篇

一般来说哈希表都是用来快速判断一个元素是否出现集合里。对于哈希表,要知道哈希函数和哈希碰撞在哈希表中的作用。哈希函数是把传入的key映射到符号表的索引上。哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。

2025-05-21 20:47:41 245

原创 Vue.js---立即执行的watch与回调执行时机

Vue.js中watch有两个关键特性:立即执行的回调函数和回调函数的执行时机。首先,当immediate选项为true时,watch会在创建时立即执行一次回调函数。通过封装scheduler调度函数,可以在初始化和数据变更时执行回调。其次,flush选项用于指定调度函数的执行时机,当flush为'post'时,回调函数会被放入微任务队列,等待DOM更新后执行;否则,回调函数会同步执行。

2025-05-19 16:22:15 282

原创 力扣算法ing(73 / 100)

四数相加就体现了map的好处,受到之前两数相加的启发,我选择了先计算前面两个数进入map,后遍历后两个数求和看看是否存在与map当中,如果存在我直接ans++,但是第一次提交的时候答案错误了,ans++代表的是map里面只有一个sum,但是有的时候可能会有多个,所以正确方法一个是将次数也要存起来,直接用ans加次数就可以了。

2025-05-17 17:47:59 927

原创 Vue.js---watch 的实现原理

这一次接触到了平时使用的watch属性,它的底层实现其实就是effect以及options.scheduler,为了更加通用watch 使用 traverse 函数递归遍历对象的所有属性。然后我们也实现了传入getter函数,主要是对source进行判断,函数就赋值给getter直接执行,参数就traverse 递归遍历,最后我们通过懒加载 effect 实现了新旧值的对比,确保回调函数能够获取到变化前后的值。

2025-05-17 17:46:28 361

原创 JS手写代码篇---手写 new 操作符

new的手写主要通过它实现的四个步骤进行一一实现,创建一个原型被设置为构造函数的 prototype 属性的对象,改变this的指向,判断新对象的类型最后进行对应的处理。

2025-05-17 17:41:27 355

原创 力扣算法ing(72 / 100)

本文介绍了两个与哈希表相关的算法问题:两个数组的交集和快乐数。对于两个数组的交集问题,通过使用Set数据结构来去重,并利用Set的has方法判断元素是否存在于另一个数组中,最终返回交集。优化后的代码通过减少遍历次数和直接使用Set的特性,提升了效率。对于快乐数问题,通过不断计算数字各位的平方和,并使用Set记录中间结果,判断是否进入循环或最终得到1,从而确定是否为快乐数。两个问题都充分利用了Set的去重和查找特性,展示了哈希表在解决此类问题中的优势。

2025-05-16 21:36:25 689

原创 Vue.js---计算属性computed和lazy

computed属性的实现我们首先用到了懒加载effect,需要使用的时候才使用。因为我们前面返回了effectFn作为effect函数的返回值,那我们就可以手动调用该副作用函数了。接着我们实现了computed属性,我们是传入一个getter函数和懒加载属性,为了解决多次访问会导致effectFn多次计算,我们需要缓存value。但是我们如果修改obj.foo的值,我们发现并没有响应的修改最后的sumRes,那是因为dirty并没有在修改值之后被修改为true,所以我们就要使用scheduler选项,在

2025-05-16 21:33:28 668

原创 JS手写代码篇---手写 instanceof 方法

instancecof用于检测一个对象是否是某个构造函数的实例。它通常用于检查对象的类型,尤其是在处理继承关系时。这种原型链机制是 JavaScript 继承和原型继承的基础。通过原型链,JavaScript 实现了对象的属性和方法的继承。这就让我想到本道题木的解题思路:在函数当中我们输入目标和待测类型,进行循环,如果原型链上有待测类型的原型返回true,没有也就是当了原型链的终点null,返回false

2025-05-16 21:16:35 218

原创 JS手写代码篇---手写 Object.create

在手写代码时,理解代码的作用和实现效果是关键。以手写 Object.create 为例,其核心思路是创建一个新对象,并将传入的对象作为其原型。通过定义一个构造函数 F,将其原型设置为传入的对象 obj,然后返回 F 的实例,即可实现类似 Object.create 的功能。测试结果表明,手写的 create 函数与原生 Object.create 方法效果一致,成功创建了以 person 为原型的新对象 child1。

2025-05-15 18:07:51 231

原创 Vue.js---避免无限递归循环&& 调度执行

今天一下子看了两小节的内容,首先是避免无限循环:在执行无限循环的时候track何trgger的副作用函数都是activeEffect,那么解决方法就是在trigger当中判断activeEffect和effect函数是否是相同的。然后我看了调度,其实vue当中控制调度是添加一个调度函数来实现的,传入一个调度函数,在track当中处理这个调度函数,trigger就执行调度方法。

2025-05-15 17:45:41 462

原创 力扣算法ing(71 / 100)

本道题考的是对set的敏感度,我们知道set最大的优点就是不含重复的值,这对于本道题目有大大滴好处,先初始化一个对比set,后nums2是否在set中,在处理nums2进答案数组的时候,也是为了去重,我们事先将答案数组转化为set,后转化为数组的。

2025-05-15 14:56:31 200

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除