回顾Vue2 的响应式 Vue3 的响应式从 Reactive 开始 createReactiveObject: baseHandlers: Proxy.get Proxy.set Proxy.deleteProperty Proxy.ha...
Read More从一个简单例子开始 Vue.createApp packages/runtime-core/src/index.ts ensureRenderer 执行render方法从一个简单例子开始<div id="app"> <button></but...
Read More1. Vue 2和Vue 3的项目结构比较 1.1 核心库 1.2 运行时 1.3 编译器 1.4 辅助工具和插件 1.1 核心库 1.2 运行时 1.3 编译器 1.4 辅助工具和插件 2. Monorep...
Read More为什么需要浏览器标签之间的通信? JavaScript 如何实现跨标签通信? 1. BroadcastChannel (MDN) 2. Service Worker 3. localStorage 4. SharedWorker (MDN) ...
Read More定义 01背包 暴力解法 二维dp数组(动规五步法) 1. 确定dp数组以及下标意义 2. 确定递推公式 3. db数组初始化 4. db数组遍历顺序 5. 举例演示dp数组...
Read More定义 协变(Covariant) 逆变(Contravariant) 双变(Bivariant) 不变(Invariant) 总结 逆变协变对 infer 的影响 练习定义「Subtyping」 是一个面向对象编程中非常重要的概念,用于描述一个类型和另一个类型之间的关系。一个类型可以被看作是另一...
Read More介绍和应用 keep-alive是什么 它的使用场景 源码解析 keep-alive不会生成真正的DOM节点,这是怎么做到的? keep-alive包裹的组件是如何使用缓存的? 介绍和应用keep-alive是什么 keep-a...
Read More定义 可能的疑问? 1. 虚拟DOM为何能提高页面更新性能? 2. 虚拟DOM的节点信息怎么和真实DOM联系起来的 3. vue是怎么做到批量修改dom的,如何优化的。 VNnode patch 1. 新增节点 2. 删除节点 3. 更新节点 ...
Read More1. 使数据“可观测” (Observer) 2. 依赖管理器 (Dep) 3. 依赖到底是谁?(Watcher) 验证 总结1. 使数据“可观测” (Observer)class Observer { value: any constructor(value: any) { this.va...
Read Morestep1. ts简单实现前半部分要求 step2. 修改默认返回类型使其为精准类型 step3. 解决Zip<Target, Source>类型不匹配的问题 step4. 实现去除 readonly 的高级类型 step5. 最终 使用 ts 实现一个 zip 函数,对两个数组的元素按...
Read More编译过程 LHS和RHS 为什么需要区分LHS和RHS 小结 编译过程整个编译过程,️有3个重要角色,分别是:引擎从头到尾负责整个 javascript 程序的编译和执行过程。编译器负责语法分析及代码生成等作用域负责收集并维护由所有声明的标识符(变量)组成的一系...
Read Morenpm2 yarn pnpm Store Links(hard link & symbolic link) hard link symbolic link pnpm中是如何结合hard link和symbolic link的 ...
Read More最大公约数的计算,用到辗转相除法 最小公倍数的计算,两数的乘积/最大公约数最大公约数的计算,用到辗转相除法例如:求 gcd(24, 10) ,可以转换为 gcd(10,4), 然后是 gcd(4,2) ,然后是(2,0),最好得出结果是2方法1:function gcd(a, b) { var temp ...
Read MoreArray.prototype.map Array.prototype.filter Array.prototype.reduce Array.prototype.flatArray.prototype.mapArray.prototype.map2 = function(callbackfn, thi...
Read More1. 下面的问题你能准确回答出来么? 2. 静态作用域和动态作用域 3. 执行上下文栈 顺序执行? 可执行代码 执行上下文栈 4. 变量对象 全局上下文 函数上下文 执行过程 a. 进入执行上下文 b. 代码执行 ...
Read More1. 从JS创建一个对象开始说起: 1.1 工厂模式创建对象 (缺点是无法知道创建出来的对象是一个什么类型的对象) 1.2 构造函数创建对象 优点:没有显示创建对象,只有在new 的时候在内存里创建一个新对象;person1 和person2都...
Read More1. 工厂模式 2. 构造函数模式 3. 原型模式 3.1 原型模式优化 4. 组合模式 4.1 动态原型模式 5.1 寄生构造函数模式 5.2 稳妥构造函数模式1. 工厂模式function createPerson(name) { var o = new Object() 0.name ...
Read More1. 原型链继承 2. 经典继承(借用构造函数(使用call)) 3. 组合继承 4. 原型式继承 (Object.create) 5. 寄生式继承 6. 寄生组合继承1. 原型链继承function Parent() { this.name = 'xwk'}Parent.prototype.ge...
Read Morejs 编译基础(babel) 什么是编译器? 什么是解释器? js 编译基础(babel)babel目前是前端领域的必备工具了,他可以让我们使用一些新的语法和api。babel会在编译的过程中,将一些不支持的api添加polyfill以支持当前环境。babel更像一种,从...
Read MoreObject.prototype.toString 原理 部署了 Symbol.toStringTag 属性的内置对象 1. 三个容器对象 2. BigInt 和 Symbol 3. 四个集合(Collection)对象 4. ArrayBuffer 及其视图...
Read More1. call和apply call的模拟实现 apply的模拟实现 2. bind 版本一: 版本二: 3. new 第一版: 第二版: 最终版:1. call和apply call方法和apply方法,实现一个就行了,两个方法除了第二个参数以外,其他完全一样。 apply方法第二个参...
Read More最大公约数的计算,用到辗转相除法 最小公倍数的计算,两数的乘积/最大公约数最大公约数的计算,用到辗转相除法例如:求 gcd(24, 10) ,可以转换为 gcd(10,4), 然后是 gcd(4,2) ,然后是(2,0),最好得出结果是2方法1:function gcd(a, b) { var temp ...
Read MoreArray.prototype.map Array.prototype.filter Array.prototype.reduce Array.prototype.flatArray.prototype.mapArray.prototype.map2 = function(callbackfn, thi...
Read MoreObject.prototype.toString 原理 部署了 Symbol.toStringTag 属性的内置对象 1. 三个容器对象 2. BigInt 和 Symbol 3. 四个集合(Collection)对象 4. ArrayBuffer 及其视图...
Read More1. call和apply call的模拟实现 apply的模拟实现 2. bind 版本一: 版本二: 3. new 第一版: 第二版: 最终版:1. call和apply call方法和apply方法,实现一个就行了,两个方法除了第二个参数以外,其他完全一样。 apply方法第二个参...
Read More为什么需要浏览器标签之间的通信? JavaScript 如何实现跨标签通信? 1. BroadcastChannel (MDN) 2. Service Worker 3. localStorage 4. SharedWorker (MDN) ...
Read Morenpm2 yarn pnpm Store Links(hard link & symbolic link) hard link symbolic link pnpm中是如何结合hard link和symbolic link的 ...
Read More1. 下面的问题你能准确回答出来么? 2. 静态作用域和动态作用域 3. 执行上下文栈 顺序执行? 可执行代码 执行上下文栈 4. 变量对象 全局上下文 函数上下文 执行过程 a. 进入执行上下文 b. 代码执行 ...
Read More1. 从JS创建一个对象开始说起: 1.1 工厂模式创建对象 (缺点是无法知道创建出来的对象是一个什么类型的对象) 1.2 构造函数创建对象 优点:没有显示创建对象,只有在new 的时候在内存里创建一个新对象;person1 和person2都...
Read More1. 工厂模式 2. 构造函数模式 3. 原型模式 3.1 原型模式优化 4. 组合模式 4.1 动态原型模式 5.1 寄生构造函数模式 5.2 稳妥构造函数模式1. 工厂模式function createPerson(name) { var o = new Object() 0.name ...
Read More1. 原型链继承 2. 经典继承(借用构造函数(使用call)) 3. 组合继承 4. 原型式继承 (Object.create) 5. 寄生式继承 6. 寄生组合继承1. 原型链继承function Parent() { this.name = 'xwk'}Parent.prototype.ge...
Read Morejs 编译基础(babel) 什么是编译器? 什么是解释器? js 编译基础(babel)babel目前是前端领域的必备工具了,他可以让我们使用一些新的语法和api。babel会在编译的过程中,将一些不支持的api添加polyfill以支持当前环境。babel更像一种,从...
Read More定义 01背包 暴力解法 二维dp数组(动规五步法) 1. 确定dp数组以及下标意义 2. 确定递推公式 3. db数组初始化 4. db数组遍历顺序 5. 举例演示dp数组...
Read More编译过程 LHS和RHS 为什么需要区分LHS和RHS 小结 编译过程整个编译过程,️有3个重要角色,分别是:引擎从头到尾负责整个 javascript 程序的编译和执行过程。编译器负责语法分析及代码生成等作用域负责收集并维护由所有声明的标识符(变量)组成的一系...
Read More定义 协变(Covariant) 逆变(Contravariant) 双变(Bivariant) 不变(Invariant) 总结 逆变协变对 infer 的影响 练习定义「Subtyping」 是一个面向对象编程中非常重要的概念,用于描述一个类型和另一个类型之间的关系。一个类型可以被看作是另一...
Read Morestep1. ts简单实现前半部分要求 step2. 修改默认返回类型使其为精准类型 step3. 解决Zip<Target, Source>类型不匹配的问题 step4. 实现去除 readonly 的高级类型 step5. 最终 使用 ts 实现一个 zip 函数,对两个数组的元素按...
Read More回顾Vue2 的响应式 Vue3 的响应式从 Reactive 开始 createReactiveObject: baseHandlers: Proxy.get Proxy.set Proxy.deleteProperty Proxy.ha...
Read More从一个简单例子开始 Vue.createApp packages/runtime-core/src/index.ts ensureRenderer 执行render方法从一个简单例子开始<div id="app"> <button></but...
Read More1. Vue 2和Vue 3的项目结构比较 1.1 核心库 1.2 运行时 1.3 编译器 1.4 辅助工具和插件 1.1 核心库 1.2 运行时 1.3 编译器 1.4 辅助工具和插件 2. Monorep...
Read More介绍和应用 keep-alive是什么 它的使用场景 源码解析 keep-alive不会生成真正的DOM节点,这是怎么做到的? keep-alive包裹的组件是如何使用缓存的? 介绍和应用keep-alive是什么 keep-a...
Read More定义 可能的疑问? 1. 虚拟DOM为何能提高页面更新性能? 2. 虚拟DOM的节点信息怎么和真实DOM联系起来的 3. vue是怎么做到批量修改dom的,如何优化的。 VNnode patch 1. 新增节点 2. 删除节点 3. 更新节点 ...
Read More1. 使数据“可观测” (Observer) 2. 依赖管理器 (Dep) 3. 依赖到底是谁?(Watcher) 验证 总结1. 使数据“可观测” (Observer)class Observer { value: any constructor(value: any) { this.va...
Read More