摘要: 装饰器原理 基础问答 问:什么是装饰器?有什么作用? 答:装饰器是一种​元编程语法,可以在不修改原有代码的前提下,动态地为类、方法、属性等添加一些能力,本质上还是一个函数,它接收目标对象、属性名、属性描述符(或类本身)作为参数,返回修改后的目标对象或属性描述符。 在使用的时候,是声明式的使用,在装饰 阅读全文
posted @ 2025-11-12 12:31 Achieve前端实验室 阅读(409) 评论(0) 推荐(1)
摘要: 概述 在 Web 应用架构设计中,单页应用(SPA)与多页应用(MPA)是目前两种主流的前端架构,他们各自适用于不同的业务场景。 作为一个前端开发,理解这两种模式的核心原理、技术实现及优劣势,对于我们未来选择合适的架构方案、优化应用性能有着非常重要的参考价值。 应用架构 单页和多页两种架构的差异,主 阅读全文
posted @ 2025-11-07 12:14 Achieve前端实验室 阅读(364) 评论(0) 推荐(1)
摘要: 基础问答 问:知道浅拷贝和深拷贝吗?为什么要用深拷贝? 答:拷贝,可以认为是赋值,对于 JavaScript 中的基础类型,如 string, number, null, boolean, undefined, symbol 等,在赋值给一个变量的时候,是直接拷贝值给变量,而对于引用类型,如 obj 阅读全文
posted @ 2025-11-03 21:19 Achieve前端实验室 阅读(293) 评论(0) 推荐(0)
摘要: 概述 在 JavaScript 模块化发展历程中,为解决全局变量污染,代码依赖管理等问题,先后出现了 CommonJS(CJS)、AMD、CMD、UMD、ES6 Module(ESM)五大主流方案。不同方案因设计目标、运行环境(浏览器 / Node)的差异,形成了各自的语法特性与生态定位。 其中ES 阅读全文
posted @ 2025-10-31 12:20 Achieve前端实验室 阅读(224) 评论(0) 推荐(3)
摘要: 基础问答 问:Proxy 是什么?怎么使用的? 答:Proxy 是用于创建 “对象代理” 的构造函数,它能封装目标对象(target),并通过 “拦截器对象(handler)” 自定义目标对象的基础操作(如属性读取、赋值),实现对对象行为的 “劫持”,手写使用方式。 // 语法:new Proxy( 阅读全文
posted @ 2025-10-30 11:51 Achieve前端实验室 阅读(316) 评论(0) 推荐(2)
摘要: 基础问答 问:有使用过 Promise.race 吗,说说他的作用。 答:Promise.race 接收一个 Promise 数组(或者一个具有迭代器的对象)作为参数,返回一个新的Promise,这个新的 Promise 结果是数组中第一个状态变更的Promise对象,无所谓这个状态是否是成功(fu 阅读全文
posted @ 2025-10-29 11:02 Achieve前端实验室 阅读(186) 评论(0) 推荐(1)
摘要: 基础问答 问:async/await 的原理是什么? 答:关键字本身就是 Promise 的语法糖,依托于生成器函数 (Generator) 函数能力实现的。async 关键字标志这个函数为异步函数,并且将返回结果封装为一个 Promise,await 则是暂停当前执行,等待后续的异步操作完成后再恢 阅读全文
posted @ 2025-10-28 17:25 Achieve前端实验室 阅读(491) 评论(0) 推荐(1)
摘要: 基础问答 问:手写一个防抖函数 答: /** * 基础版防抖函数(非立即执行) * @param {Function} func - 需要防抖的目标函数 * @param {number} delay - 等待时间(毫秒) * @returns {Function} - 防抖后的函数 */ func 阅读全文
posted @ 2025-10-27 10:52 Achieve前端实验室 阅读(513) 评论(0) 推荐(1)
摘要: 基础问答 问题:标准的 CSS 盒子模型是怎样的? 答案:标准盒子模型由内容区域(content)、内边距(padding)、边框(border)和外边距(margin)组成。在 content-box 模式下,width 和 height 属性仅指内容区域的宽度和高度,元素实际占据的宽度 = wi 阅读全文
posted @ 2025-10-09 21:34 Achieve前端实验室 阅读(59) 评论(0) 推荐(1)
摘要: 基础问答 问题:你在写代码的过程中,在什么时候才会设置 setTimeout 的延时为 0? 回答:有如下几种情况 避免同步任务阻塞 UI,即在渲染较多数据的时候,可以通过 setTimeout 分批渲染。 const data = new Array(1000).fill(1).map((x, i 阅读全文
posted @ 2025-09-29 10:16 Achieve前端实验室 阅读(330) 评论(0) 推荐(1)