Skip to content
Angelina
Search
K
Main Navigation
HTML&CSS
开始
Vue.js
开始
MVVM 架构
Vue 单向数据流
Vue3 渲染原理
.vue 单文件组件编译流程
Vue 模板编译流程
Vue 响应式原理
Vue 的优点和特点
Vue2 和 Vue3 的区别
Vue3 编译优化
Vue3 为什么比 Vue2 快
Vue3 DOM Diff 算法
Vue 组件通讯的几种方式
Vue3 为什么用 Proxy 替换 Object.defineProperty
Vue2 不能监听数组下标的原因
为什么 Vue 中的 data 是函数而不是对象
computed、watch 和 method 怎么选
computed 的缓存与脏检查机制
created 和 mounted 有什么区别
vue-router 是什么、能做什么
hash 模式与 history 模式的区别
Vue Router 导航守卫
Vue 路由传参的几种方式
前端路由的实现原理
Vuex:状态管理方案
Vuex 与 Pinia 的对比
同步赋值与异步赋值的渲染次数
Vue 项目的权限管理
Vue 项目脚手架
Vue 插槽的三种用法
Vue3 为什么比 Vue2 打包体积更小
Vue 中的 key
Vue 过滤器
Vue Scoped 样式原理
Vue $nextTick 使用与实现
Vue keep-alive
v-show 与 v-if 的区别
v-model 实现原理
React
开始
Fiber
Hooks
useEffect 闭包陷阱
JSX 基础与插值渲染
useState 状态管理
useContext:跨组件共享数据
useReducer:集中管理复杂状态逻辑
useEffect:管理函数组件中的副作用
React.memo:跳过无意义的重渲染
useCallback 与 useMemo:缓存函数与计算结果
useRef:跨渲染周期保持引用不变
JS&TS
开始
JavaScript 数据类型全解
null 和 undefined 的区别
JavaScript 类型判断三剑客
JS 装箱机制
JavaScript 类型转换
== 和 === 的本质区别
const、let、var 该怎么选
变量提升与暂时性死区
Symbol:独一无二的值
JS 字符串常用操作
数组去重的五种方式
清空数组的几种姿势
一张图记住 JS 数组常用方法
一个 reduce 搞定数组五连问
伪数组不是数组,但也别慌
怎么区分数组和对象
判断两个对象是否相等
判断一个对象是不是空的
创建 JS 对象的五种方式
遍历 JS 对象的四种方式
原生对象、内置对象、宿主对象
静态方法和实例方法的区别
JavaScript 函数的几种写法
回调地狱是怎么回事
Promise 解决了什么问题
async/await 到底做了什么
Promise.all / allSettled / any / race 怎么选
链式调用的实现方式
Promise 和 async/await 到底是什么关系
原型链:JavaScript 的继承机制
原型链中的优先级规则
JavaScript 作用域与经典的 setTimeout 循环问题
DOM 事件流:捕获、目标与冒泡
事件委托的原理与实践
valueOf 方法详解
JS 堆栈内存与参数传递
原型链实现继承
JavaScript 作用域链
JavaScript 闭包
TS any 与 unknown 的区别
TS void 与 never 的区别
TS interface 与 type 的区别
TypeScript 泛型详解
TS 异步编程中的类型
TS 模块化与命名空间
TS 中 this 的类型
为什么需要 TypeScript
TS 类型推断与类型注释
TS 交叉类型与联合类型
TS 类型断言
前端工程化
开始
手写题
开始
知识碎片
开始
Appearance
Menu
Return to top
On this page
前端工程化
构建工具、CI/CD、代码规范等工程化实践。
Angelina的