2023.2.13 CVTE一面
先聊项目 - 遇到什么难点怎么解决 x2
- CSS盒模型
- 怪异盒模型和普通盒模型区别
- ES6 常用api - Map和Set
- let const var
- 作用域和上下文的理解
- 闭包优缺点, 使用场景
- 防抖实现思路
- 说说事件循环 第一轮产生的微任务会在下一轮执行还是什么时候执行
- http1.1 和 http2 区别
- 怎么开启http2,后端服务器需要配置吗
- 说说http2 多路复用
- v-for key 的作用
- 除了 key 还有什么需要比较
- 说说 diff 算法大概流程
- vue 和 react 区别
- 手写
js
function compose(fnOrArg, args) {
}
function f1(args) {
return args.map((a) => a * 1);
}
function f2(args) {
return args.map((a) => a * 2);
}
function f3(args) {
return args.map((a) => a * 3);
}
function f4(args) {
return args.map((a) => a + 3);
}
compose(f1)(f2)(f3)(f4)([1, 2, 3]) // 9,15,21
👇 并不是具体的柯里化/函数组合 而是结合对应的 闭包暂存思路/把值传递遍历执行思路 实现
js
function compose(fn) {
const arr = [fn] // 暂存函数
return function temp(fnOrArg) {
if(typeof fnOrArg === 'function') {
arr.push(fnOrArg)
return temp
} else {
// 执行函数
const res = arr.reduce((val, fn)=>{
return fn(val)
}, fnOrArg)
return res
}
}
}