前端技术文章
-
Proxy.revocable是实现可撤销代理的关键,它返回含proxy和revoke函数的对象,调用revoke后proxy立即失效且不可恢复;Reflect仅用于trap内规范操作,不提供撤销能力。454 收藏 -
Reflect.set返回值仅反映JS引擎层面的赋值可行性,无法捕获业务逻辑失败;业务校验、权限控制等必须由业务层显式实现,不可依赖其返回值判断业务成功与否。382 收藏 -
React中CSSModules类名必须通过styles对象访问,不可直接拼接字符串;classnames可安全合并动态类名,但所有键值须预定义于CSS文件中并经styles映射。395 收藏 -
Tailwind的:active无法直接触发波纹动画,因其默认不启用active变体,且:active状态持续时间极短(毫秒级),难以匹配200ms+的波纹动画节奏;可靠方案是用JS控制类名生命周期,通过onMouseDown触发、onAnimationEnd清理,并配合relative/overflow-hidden容器与自定义ripple@keyframes实现。494 收藏 -
footer是语义化标签,表示内容结尾信息区,必须闭合且位置决定语义范围;联系信息须用address包裹,页脚导航需嵌套带aria-label的nav;视觉贴底需CSS实现,语义正确性优先于视觉位置。180 收藏 -
后端应返回结构化JSON,含items、has_more、next_offset字段;前端用insertAdjacentHTML('beforeend',htmlString)追加内容,禁用按钮防连点,并配合loading状态与错误提示确保交互稳定。488 收藏 -
enumerateDevices()返回Promise,需在HTTPS或localhost安全上下文中调用;过滤kind为audioinput/videoinput的设备,用deviceId(非label)传入getUserMedia约束对象,并加try/catch处理断连。159 收藏 -
变量提升是JavaScript中var声明被提升并初始化为undefined,而let/const声明虽被提升但不初始化,访问会触发ReferenceError,该区域称暂时性死区(TDZ)。118 收藏 -
事件流的三阶段是捕获→目标→冒泡:捕获阶段从window逐层向下至目标元素,适合全局预处理;目标阶段在被操作元素上触发,捕获与冒泡监听器均生效;冒泡阶段从目标元素逐层向上传播,支撑事件委托。380 收藏 -
AudioContext.currentTime与video.currentTime不同步因基准不同:前者基于音频硬件时钟,后者依赖渲染帧调度与解码延迟;应以video.currentTime为主时间轴,动态校准偏移并持续监控丢帧。459 收藏 -
应设计可恢复的懒加载重试机制:用ErrorBoundary稳住UI并提供重试入口;封装lazyWithRetry支持指数退避、超时控制与日志上报;结合预加载、缓存及FeatureFlag实现灰度降级。490 收藏 -
Less变量不支持块级作用域,仅存在全局与局部词法作用域;局部变量会完全覆盖同名全局变量,从声明处起影响该块及所有子嵌套,且不会自动恢复父级值。495 收藏 -
flex-wrap用于控制Flex子元素是否换行,默认值为nowrap,必须显式设为wrap或wrap-reverse才能换行;其行为受flex-direction主轴影响,换行方向随之改变。434 收藏 -
<p>Less中calc()配合vw实现流式字号的前提是:所有运算必须在编译期完成并化简为“a+b*100vw”线性形式,用~""拼接字符串输出,否则因Less解析器误判运算符而报错。</p>498 收藏 -
HTML本身不能直接实现SSR,SSR的核心是服务端动态生成含真实内容的HTML字符串并返回,需通过Node.js等环境调用框架渲染API(如renderToString)实时执行,而非仅修改静态index.html文件。384 收藏