源本科技 | 码上会

JavaScript 高级特性

2026/04/05
1
0

解释JavaScript中的事件冒泡和事件捕获机制

事件冒泡和事件捕获是 DOM 事件流的两个核心阶段,完整事件流分为捕获→目标→冒泡。 事件捕获 是从上往下:事件从最外层的 document/html/body 开始,一层层向内传递,直到触发事件的目标元素。 事件冒泡 是从下往上:事件从目标元素开始,一层层向外冒,直到最顶层 document。 默认情况下,addEventListener 第三个参数为 false,走冒泡阶段;设为 true 则走捕获。 两者都是浏览器传递事件的机制,冒泡更常用,捕获一般用于特殊拦截场景,理解它们是操作 DOM 事件的基础。

解释事件委托以及其优势

事件委托就是 利用事件冒泡,把本来要绑在多个子元素上的事件,统一绑在它们的父元素上。 子元素触发事件后,会冒泡到父元素,父元素通过 event.target 判断是哪个子元素触发,再执行对应逻辑。 优势非常明显:一是减少事件绑定次数,不用给每个子元素加监听,节省内存、提升性能;二是支持动态元素,后来新增的子元素不用重新绑定;三是代码更简洁,统一管理事件,便于维护。在列表、表格这类多子元素场景里几乎必用。

在JavaScript中如何使用模块

JS 现在主要用 ES6 模块化,浏览器和 Node.js 都支持。 使用很简单:导出用 export,分默认导出 export default xxx 和命名导出 export const a=1;导入用 import,对应写 import xxx from './xxx.js'import {a} from './xxx.js'。 浏览器里要在 script 标签加 type="module" 才能识别模块化;老版 Node.js 用 CommonJS,require() 导入、module.exports 导出。 大型项目一般配合 Webpack、Vite 等打包工具,解决浏览器兼容、路径、合并打包等问题。

JavaScript中的模块化有哪些好处

模块化就是把代码拆成独立、可复用的文件,好处非常多。 第一是作用域隔离,每个模块有独立作用域,变量不会全局污染,避免命名冲突;第二是代码复用,公共逻辑(工具、组件)抽成模块,多处直接引用;第三是解耦维护,功能拆分清晰,改一个模块不影响其他,便于团队协作;第四是按需加载,用到哪个模块再加载,提升页面加载速度;第五是便于扩展,新增功能只加新模块,不用改动原有代码,是现代前端项目的标准开发方式。

解释JavaScript中的装饰器模式及其应用

装饰器模式是一种 结构型设计模式,核心是不修改原有类 / 方法的代码,动态给它添加额外功能。 就像给手机套壳、贴钢化膜,手机本身没变,但多了防护、美观等功能。 在 JS 里,它通过包装函数 / 类,在原有逻辑执行前后加入新逻辑,比如日志打印、权限校验、数据缓存、埋点统计。 优点是遵循开闭原则,扩展功能不改动源码,让代码更灵活、易维护,是 Vue、React 等框架里很常见的设计模式。

在JavaScript中如何使用装饰器

JS 装饰器目前是 ES7 提案语法,写法是 @装饰器名,放在类、方法、属性前面。 分类装饰器方法装饰器,装饰器本质是函数,接收对应目标作为参数,可修改、扩展目标。 浏览器 /Node 原生暂不直接支持,需要用 Babel 或 TypeScript 配置编译。 不想用编译也可以用高阶函数模拟装饰器,把原函数传入,返回加了功能的新函数。 装饰器常用于日志、权限、缓存、埋点,写法简洁优雅,让业务代码和增强逻辑分离。

JavaScript中如何实现类的私有属性和方法

JS 实现私有成员有三种常用方式,最标准的是 ES2022 原生私有属性:用 # 开头定义,只能在类内部访问,外部和子类都读不到、改不了,语法最简单。 第二种是闭包实现:把变量 / 方法写在构造函数里,不挂载到 this,外部无法访问,适合老环境。 第三种是Symbol + 闭包:用唯一 Symbol 作属性名,避免被意外访问,但不算真正私有。 还有 WeakMap 存储私有数据,也能实现私有效果。现在优先用 # 原生方案,标准、简洁、性能好。