时间:2026.06.05
- 项目中最复杂的点
- 人生中做到极致的事情
- 项目追问
- 项目中组件+业务逻辑的设计
- React状态管理,怎么选择最优,遇到过什么坑(Redux, context, mobx, hooks)
- setState执行过程
- React Fiber机制
- js事件循环
- url输入到页面展示发生了什么
- 浏览器性能优化策略
- monorepo的使用场景、优势
- 算法:memoizeOne
javascript
/**
* 题目:实现 memoizeOne
*
* 请实现一个函数 memoizeOne(fn),返回一个新函数
*
* 要求:
* 1. 相同参数调用时返回缓存结果
* 2. 只缓存最近一次调用
* 3. 参数采用浅比较
* 4. 保留 this
*/
/**
* @param {Function} fn
* @returns {Function}
*/
function memoizeOne(fn) {
// TODO: 请在这里实现
const map = new Map();
return function(...args) {
const _this = this;
const key = JSON.stringify(args);
if (map.has(key)) {
return map.get(key);
}
else {
const res = fn.apply(_this, args)
map.set(key, res);
return res;
}
}
}
/***********************
* 以下为测试代码(可用于验证)
***********************/
function add(a, b) {
console.log("computed");
return a + b;
}
const memoAdd = memoizeOne(add);
console.log(memoAdd(1, 2)); // computed -> 3
console.log(memoAdd(1, 2)); // 3
console.log(memoAdd(2, 3)); // computed -> 5
console.log(memoAdd(2, 3)); // 5
// this 测试
const obj = {
base: 10,
calc(a, b) {
console.log("run");
return this.base + a + b;
}
};
obj.memoCalc = memoizeOne(obj.calc);
console.log(obj.memoCalc(1, 2)); // run -> 13
console.log(obj.memoCalc(1, 2)); // 13