- 博客(11)
- 收藏
- 关注
原创 JS高级——手写深拷贝,并掌握深拷贝实现原理
JavaScript 深拷贝是指在复制对象时,不仅复制对象本身,还复制对象内部的所有值和引用。这样,新对象和原始对象是完全独立的,修改一个对象不会影响另一个对象。深拷贝与浅拷贝相对应,浅拷贝仅复制对象的第一层属性,如果对象内部还有其他对象,那么浅拷贝后的新对象和原始对象仍然共享内部对象的引用。深拷贝的作用:避免副作用:由于深拷贝创建的新对象与原对象是完全独立的,它们之间不会相互影响。这有助于避免在操作对象时产生意外的副作用,例如在处理复杂数据结构时。
2024-07-29 15:05:26
703
原创 JS高级——手写Promise,并搞懂Promise实现原理
首先,我们需要创建一个名为CYPromise的类,并定义三种状态:pending、fulfilled和rejected。CYPromise类的构造函数将接收一个执行器(executor)函数作为参数。resolve和reject,它们分别用于将Promise状态从pending更改为fulfilled或rejected。我们还需要在类中实现状态的改变以及状态改变时对应的值(value)或原因(reason)的存储。// 初始化状态为pending// 初始化成功的值为undefined。
2024-07-28 21:22:56
759
原创 JS高级——Promise使用
当所有的Promise状态变成fulfilled状态时,新的Promise状态为fulfilled,并且会将所有Promise的返回值组成一个数组;当有一个Promise状态为reject时,新的Promise状态为reject,并且会将第一个reject的返回值作为参数;在我们调用resolve的时候,如果resolve传入的值本身不是一个Promise,那么会将该Promise的状态变成。如果所有的Promise都是reject的,那么也会等到所有的Promise都变成rejected状态;
2024-07-28 21:06:01
2996
原创 JS高级——节流函数
在某个时间内(比如500ms),某个函数只能被触发一次;过程:当事件触发时,相应的函数并不会立即触发,按照一定的频率去执行默认情况下,我们的防抖函数最后一次是不会执行的因为没有达到最终的时间,也就是条件满足不了的但是,如果我们希望它最后一次是可以执行的,那么我们可以让其传入对应的参数来控制我们来看一下代码如何实现:我们增加了else语句:所以我们可以使用timer变量来记录定时器是否已经开启已经开启的情况下,不需要开启另外一个定时器了else语句表示没有立即执行的情况下,就会开启定时器;
2024-02-26 16:56:39
9543
原创 JS高级——浏览器事件循环-微任务、宏任务
JS代码在浏览器中的执行过程在里面已经介绍了,但是文章中执行的代码都只是一般情况的代码执行,都是从上往下依次执行;实际上在开发中我们会经常使用网络请求(axios)、promiese、setTimeOut、setInterval等异步操作时,那么在执行代码时浏览器会按照什么样的执行顺序来执行呢?接下来让我们来了解浏览器的事件循环机制。
2023-05-14 15:54:08
744
原创 JS高级——浏览器运行前端项目的原理及流程(同:浏览器输入一个URL并enter时,到底发生了什么?)
浏览器中执行JS代码,最主要的步骤是在V8引擎中进行编译和运行,主要流程是将JS代码解析成抽象语法树(AST),AST经过解释器(Ignition)转化为字节码,然后编译为机器码,最后在调用栈中进行执行来对DOM进行操作。
2022-12-25 15:19:41
2989
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人