手写Promise及其相关方法
# 手写 promise # 完整代码 const PENDING = Symbol('pending');const FULFILL = Symbol('resolve');const REJECT = Symbol('reject');class myPromise { constructor(executor) { /* 初始化 promise pending 状态 */ this.status = PENDING; /* 记录当前 promise 兑现值和拒因 */ this.value =...
more...理解事件循环
# 浏览器中的事件循环 # 同步与异步 浏览器是单线程的,所以为了不堵塞代码的运行,我们将任务分为了同步任务,和异步任务( setTimeout 和 setInterval 、 axios 、事件绑定等这种带回调函数的),那么同步任务和异步任务又是按照怎样的顺序进入主线程执行的呢,废话不多说,直接上图好叭 😎 先看一段代码,我们会结合这张图和代码来先简单认识一下同步和异步的执行 执行的结果很简单 start -> end -> 时间到了 整个 script 代码进入主线程,遇到同步任务 start 的打印,执行打印 遇到异步任务 setTimeout ,将...
more...Vue响应式模块-reactivity-effect
# effect 方法剖析与实现 # 完整代码 export type EffectFn = { (): any; deps: Array<Set<EffectFn>>; options?: Options;};type Options = { scheduler?: (fn: EffectFn) => void; lazy?: boolean;};let activeEffect: EffectFn;const effectStarck:...
more...Vue响应式模块-reactivity-computed
# 文档描述 接受一个 getter 函数,返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象。 具有缓存机制,只有当依赖的响应式数据发生改变的时候才会重新计算,否则会直接读取缓存的值 # 实现思路 computed 返回的是一个 ref ,所以我们需要一个类来进行 get value , set value 的操作 当依赖的响应式数据发生改变时会重新计算,所以需要引入 effect 函数来注册依赖副作用,并进行依赖的收集和触发操作,收集的依赖就是...
more...Vue响应式模块-reactivity-reactive
# ractive 方法剖析与实现 # 完整代码实现 import { isArray, isObject, hasChanged } from '../utils/index';import { effect, track, trigger } from './effect';export function reactive(target: any) { if (!isObject(target)) return target; if...
more...Vue响应式模块-reactivity-ref
# 文档介绍 接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value。 # 实现原理 因为返回的是一个 ref 对象,所以需要一个 RefImpl 类,在类里面进行 get value 和 set value 操作 get value 里进行依赖的收集, set value 里进行依赖的触发 # 完整代码 import { hasChanged, isObject } from '../utils/index';import { track, trigger...
more...