-
Node.js通过libuv库实现非阻塞文件I/O,其事件循环将磁盘操作委托给线程池处理。1.调用如fs.readFile时,请求被交给libuv;2.libuv使用内部线程池执行实际I/O操作;3.主线程不阻塞,继续处理其他任务;4.完成后线程通知事件循环;5.事件循环将回调加入队列并在适当阶段执行。同步I/O会阻塞事件循环,影响性能。管理回调和错误可通过Promises实现链式调用,或使用async/await语法提升可读性,同时务必进行错误捕获与处理。
-
IE6/7中z-index失效的根本原因是父容器未触发层叠上下文,必须给直接父级设position:relative以创建上下文,而非仅调高z-index值或依赖祖先定位。
-
display:none使元素完全移除文档流,不占空间且无法交互;2.visibility:hidden仅隐藏元素但保留布局空间;3.前者用于彻底隐藏,后者适用于需保持占位的场景。
-
mask-image失效主因是三方面:需检查图片加载与CORS、元素必须有可绘制内容、Firefox要求SVGmask内fill明确;渐变蒙版须用luminance模式并避免rgba;clip-path优先于mask-image执行。
-
JavaScript是基于原型的语言,因其不依赖类而通过对象间委托关系实现复用与继承,该关系由prototype、__proto__及原型链终止于null共同构建。
-
overflow:hidden通过触发BFC使父容器正确包裹浮动或溢出内容,而非单纯隐藏;适用于浮动未清除、负margin、内容过长等场景,但会裁剪超出区域的内容。
-
Provide/Inject是Vue的祖先-后代通信机制,需传递响应式对象(如reactive、ref或computed)才能触发更新;直接解构会丢失响应性,推荐用toRefs或readonly保障响应链完整。
-
JavaScript通过window.history操作浏览器历史,支持后退、前进、跳转及修改URL而不刷新页面;仅限同源操作,无法读取完整历史;pushState添加新记录,replaceState替换当前记录;popstate监听导航变化并获取state数据。
-
根本原因是布局缺乏锚定主干,应使用max-width+margin:0auto固定容器宽度来切断样式传导链,再用flex/grid替代浮动/绝对定位,并集中管理响应式断点。
-
async与defer本质区别在于执行时机:async下载完立即执行且不保证顺序,可能阻塞DOM解析;defer则等DOM解析完按序执行。
-
dragover事件未阻止默认行为是拖拽失效的最常见原因,必须在每次dragover中调用event.preventDefault();drop只触发于松手时鼠标正下方的元素,需确认目标元素尺寸、遮挡及事件绑定位置;文件读取仅限drop回调中的event.dataTransfer.files。
-
HTML中空白字符(空格、Tab、换行)默认被合并为单个空格;可用 实体或white-space:pre/pre-wrap实现可控空白;DOM中Tab仅影响可读性,不参与渲染。
-
能,内联SVG的fill可直接用CSS控制,但需删除SVG内联颜色属性并用类名统一设置fill:currentColor;background-image或img引用的SVG无法通过CSSfill换色。
-
SVG元素需用createElementNS创建并指定命名空间,属性用setAttributeNS设置,禁用innerHTML更新,事件绑定遵循DOM标准,注意跨浏览器兼容性。
-
提取公共类名可能增大CSS体积,因@extend跨模块时生成冗余组合选择器,如.header.text-center等,比单独声明更大;应优先用CSS自定义属性+单一声明源替代。