前端冷门面试题
2026年1月19日大约 1 分钟
一、 JS
1、 实现打印柯理化函数结果
问题
// 实现打印的方法 add
let a = add(1, 2, 3)(4, 5)(7, 8, 9);
console.log(a); // 要求能打印 39nodejs实现结果
const utils = require("node:util");
function add() {
let args = [...arguments];
function _add() {
args.push(...arguments);
return _add;
}
_add[utils.inspect.custom] = function () {
// utils.inspect.custom 是 Node.js 中的一个特殊属性,用于自定义对象的字符串表示。
return args.reduce((acc, cur) => acc + cur, 0);
};
return _add;
}注意
浏览器无法实现 ,需要改动 console.log函数
或者使用 console.log(+a)
2、为什么需要虚拟DOM ?
1、框架的设计
数据变化 --> 组件
像vue和react 最小单位是组件 组件里面可能有多个dom。如果真实dom操作 ,涉及复杂的重排(reflow)和重绘(repaint)过程,频繁操作会导致性能急剧下降,尤其在复杂应用中。
框架通过 虚拟dom 作为javascript对象 批量更新与Diff算法,操作成本极低 。开发者只需描述"UI 应该长什么样",框架负责"如何高效更新"。
2、解耦运行环境
解决跨平台能力 虚拟 DOM 是平台无关的抽象层
React Native:虚拟 DOM → 原生组件
Weex/UniApp:虚拟 DOM → 移动端原生渲染
只需替换渲染器 (Renderer),同一套组件逻辑可运行在不同平台。