Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Zhang Bao's Personal Website

Hello, My Chinese name is "张宝". I am a front-end development programmer (more than 6 years of experience)from Shanghai, China. I usually write in Chinese.

I am active in many Chinese communities, such as juejin(掘金), Yuque(语雀) and bilibili(B站).

Here is a list of what I publish on these platforms:

周刊 & 教程

JavaScript

  • 🎥 手撕 Promise A/+ 实现(分四部分讲解)
    1. Promise API 介绍
    2. 基本功能实现:实现具备 .then 方法的 Promise 对象
    3. 异步功能支持:支持 pending 状态 then 回调函数的收集和异步调用功能(借助更精确的 queueMicrotask 而非 setTimeout
    4. 链式调用支持:实现 .then 方法返回一个 Promise 对象的功能
  • ES2016
  • ES6 class X {} 的 ES5 解释
    • 本质上就是构造函数的语法糖
  • ES6 class X extends P {} 的 ES5 解释
    • 内部执行步骤
      1. X.prototype 的原型对象设置成 P.prototype
      2. X 的原型对象设置成 P
      3. 执行 P 构造函数逻辑
      4. 执行 X 构造函数逻辑

Node.js

  • 图解:Node.js 事件循环系列(共 7 篇)
    • Node.js 事件循环比浏览器稍复杂些
    • 事件循环执行顺序
      • 微任务队列(microtask queue)→计时器队列(timer queue)→I/O 队列(I/O queue)→检查队列(check queue)→关闭队列(close queue)
      • 事件循环的开始、结束以及队列之间都会执行微任务队列,另外
      • 计时器队列/检查队列每执行完一次回调函数之后会执行微任务队列
  • util.promisify() 函数
    • 将基于回调的函数转换为基于 Promise 的,方法是通过代理最后一个 callback 回调参数
  • Koa 与 Express 的比较:多数场景下选择 Express 就对了
    • Express 是现在最流行的 Node.js Web 应用框架,Koa 是它的轻量级版本,相较前者没有内置路由、模板引擎等功能
  • 最小化 JavaScript 中间件模式实现
    • 学习下 Koa 中间件系统是如何运作的(装 middlewares 的 stack + runner(0)

React

  • React Hooks 内部工作原理
    • 没什么魔法,就是使用的数组 + 记录当前要访问的 Hook 的索引值(每次渲染完记得重置)
    • 基于实现方式,因此 Hook 严格依赖执行顺序,所有影响执行顺序的代码组织方式都会导致 BUG(比如:在条件语句或循环语句中使用),因此要求 Hook 要写在函数体顶层(top level)
  • 修复 React useEffect 中的竞态条件问题
    • 这种情况还是蛮常见的,解决方案两个:一个是借助布尔标志 ignore,一个是 AbortController.abort() 方法
  • React:useTransition() vs useDeferredValue()
    • React 18 引入了并发(Concurrency)特性,这两个钩子就是利用了这一特性,达成可中断、非堵塞式的 UI 渲染,提升页面可响应性

Vue

TypeScript

前端工程化

CSS

  • CSS-in-JS 到底是什么?
    • 本文偏理论,介绍 CSS-in-JS 理念产生的背景,CSS 这门语言本身会带来的问题,以及相比传统 CSS 写法,CSS-in-JS 具备哪些优势

其他


常用代码片段

// 获取一个对象上所有的属性键。Symbol 和字符串,枚举和不可枚举
function getOwn(obj) {
    return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj))
}

// 判定一个对象上是否包含指定属性键
Object.hasOwn(obj, propKey)

About

Zhang Bao's Personal Website

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors