From 249191896a39cebc2983886e4bc9ae4315bba469 Mon Sep 17 00:00:00 2001 From: huanghaosheng <386998068@qq.com> Date: Fri, 1 May 2026 23:51:11 +0800 Subject: [PATCH] vault backup: 2026-05-01 23:51:11 --- hhs/EXAM/Week06.md | 1313 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1313 insertions(+) create mode 100644 hhs/EXAM/Week06.md diff --git a/hhs/EXAM/Week06.md b/hhs/EXAM/Week06.md new file mode 100644 index 0000000..76e1fca --- /dev/null +++ b/hhs/EXAM/Week06.md @@ -0,0 +1,1313 @@ +--- +tags: [Frontend, Exam, Axios, React, Vue, JavaScript, CSS, Node.js, HTTP] +create time: 2026-04-30 14:30 +--- + +# 武科大 - 第六次前端摸底测试(错题复盘) + +## 概述 + +本文档记录金山考试 - 武科大第六次前端摸底测试的**全部 110 道单选题错题**。本次测试覆盖 JavaScript 基础、事件机制、异步编程、Axios/Fetch、浏览器 API、HTTP 协议、CSS、Vue 3、React Hooks、Node.js / npm、Webpack 等知识领域。 + +错题库已按**知识点主题**分组,每题附带详细解析、代码示例和图解,帮助查漏补缺。 + +> [!summary] 错误统计 +> - **总题数**:110 道题 +> - **错题数**:27 道 +> - **正确率**:~75% +> - **薄弱领域**:事件机制理解、异步执行顺序、Vue/React 深度概念、HTTP 状态码区分 + +## 错题详解 + +### 一、事件处理 + +#### Q2 — 取消默认事件 vs 阻止冒泡 ❌ 答 A,正确 C + +> **题目**:如何取消默认事件效果? +> +> | 选项 | 内容 | +> |------|------| +> | A | `cancelBubble=true` | +> | B | `stopPropagation()` | +> | C | `preventDefault()` ✅ | +> | D | `return` | + +> [!warning] 核心混淆 +> `cancelBubble` 和 `stopPropagation()` 是**阻止事件冒泡**,不是取消默认行为! +> +> - `e.preventDefault()` → 取消元素的**默认动作**(如 `` 跳转、`
` 提交) +> - `e.stopPropagation()` → 停止事件向**父元素传播**(不冒泡了) +> - `e.cancelBubble = true` → IE 旧版写法,等同于 `stopPropagation()` +> - 在行内 `onclick="return false"` 可以等效于 `preventDefault() + stopPropagation()` + +```mermaid +flowchart LR + subgraph "事件流" + A[捕获阶段] --> B[目标阶段] + B --> C["冒泡阶段"] + end + + preventDefault["preventDefault()\n→ 阻止默认行为\n不影响冒泡"] -.-> B + stopPropagation["stopPropagation()\n→ 阻止向上冒泡\n不影响默认行为"] -.-> C + + style preventDefault fill:#EF4444,color:#fff + style stopPropagation fill:#3B82F6,color:#fff +``` + +> [!tip] 常见默认行为 +> - `` 点击跳转 +> - `` 提交刷新页面 +> - 右键菜单 +> - 文本选择拖拽 +> - 鼠标滚轮页面滚动 + +--- + +#### Q19 — CSS 继承性 ❌ 答 D,正确 C + +> **题目**:下面哪个属性不会继承? +> +> | 选项 | 内容 | +> |------|------| +> | A | `color` | +> | B | `font-size` | +> | C | `border` ✅ | +> | D | `line-height` | + +> [!answer] 解析 +> CSS 中只有**部分属性会继承**给子元素。可继承的属性主要是与**文本渲染**相关的:`color`、`font-*`、`line-height`、`text-*`、`visibility` 等。而布局相关属性几乎都不继承:`border`、`margin`、`padding`、`width`、`height`、`background` 等。 + +```mermaid +graph TB + subgraph "可继承的属性" + T1["color"] + T2["font-size / font-family"] + T3["line-height"] + T4["text-align"] + end + + subgraph "不可继承的属性 ← 重点记 border!" + B1["border"] + B2["margin / padding"] + B3["width / height"] + B4["background"] + end + + style B1 fill:#EF4444,color:#fff +``` + +--- + +#### Q16 — 获取 CSS 样式 ❌ 答 A,正确 B + +> **题目**:下面哪个方法可以获取元素的 CSS 样式? +> +> | 选项 | 内容 | +> |------|------| +> | A | `getElementStyle()` | +> | B | `getComputedStyle()` ✅ | +> | C | `getStyle()` | +> | D | `getCurrentStyle()` | + +> [!answer] 解析 +> - **标准方法**:`window.getComputedStyle(element)` → 返回所有最终计算后的样式 +> - **IE8 兼容**:`element.currentStyle`(已过时,仅 IE 支持) +> - A、C 都不是原生 API + +```js +const el = document.querySelector('.box'); +const styles = window.getComputedStyle(el); +console.log(styles.backgroundColor); // 计算后的值,如 "rgb(255, 0, 0)" +``` + +> [!tip] `getComputedStyle` vs `el.style` +> | 方法 | 能读什么 | 返回值类型 | +> |------|---------|-----------| +> | `el.style.prop` | 只读元素**内联样式**(`style="..."`) | 字符串 | +> | `getComputedStyle()` | 读**所有生效**样式(含 CSS 文件、类) | CSSStyleDeclaration 对象 | + +--- + +#### Q31 — 阻止事件冒泡 ❌ 答 C,正确 B + +> **题目**:用于阻止事件冒泡的方法? +> +> | 选项 | 内容 | +> |------|------| +> | A | `事件对象.stopDeafault()` | +> | B | `事件对象.stopPropagation()` ✅ | +> | C | `事件对象.preventPropagation()` | +> | D | `事件对象.preventDefault()` | + +> [!answer] 解析 +> 注意拼写!`stopPropagation()` 是标准方法。A 选项 `stopDeafault` 是个拼写陷阱(应为 `preventDefault`),D 是阻止默认行为而非冒泡。 + +--- + +#### Q32 — 事件委托 ❌ 答 D,正确 D(此题作答正确,但文档中标注为错题——请确认) + +> **题目**:关于事件委托,说法错误的是? +> +> | 选项 | 内容 | +> |------|------| +> | D(错误说法) | 事件委托中的 `this` 与 `e.target` 指向同一个对象,它们可以随意互换 | + +> [!answer] 解析 +> 事件委托中绑定的回调函数的 `this` 指向**注册事件的父元素**,而 `e.target` 指向**实际触发事件的子元素**——两者可能不同! + +```js +ul.addEventListener('click', function(e) { + console.log(this); //