news 2025/12/29 3:07:48

前端面试题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端面试题

以下是几道前端面试中高频且能体现综合能力的题目,涵盖 JavaScript 深入理解、框架原理和工程化实践,附详细解题思路:

1. 请解释 JavaScript 中的原型继承与 Class 继承的区别,并用代码举例说明

  • 解题思路
    • 原型继承:基于原型链实现,通过Object.create()或构造函数的prototype属性让子对象继承父对象的属性和方法,是 JS 原生的继承方式。
      this.name = 'parent'; } Parent.prototype.sayName = function() { console.log(this.name); }; function Child() { Parent.call(this); // 继承实例属性 this.age = 18; } // 继承原型方法 Child.prototype = Object.create(Parent.prototype); Child.prototype.constructor = Child;

      以下是几道前端面试中高频且能体现综合能力的题目,涵盖JavaScript深入理解、框架原理和工程化实践,附详细解题思路: ### 1. 请解释JavaScript中的原型继承与Class继承的区别,并用代码举例说明 - **解题思路**: - 原型继承:基于原型链实现,通过`Object.create()`或构造函数的`prototype`属性让子对象继承父对象的属性和方法,是JS原生的继承方式。 ```javascript // 原型继承示例 function Parent() { this.name = 'parent'; } Parent.prototype.sayName = function() { console.log(this.name); }; function Child() { Parent.call(this); // 继承实例属性 this.age = 18; } // 继承原型方法 Child.prototype = Object.create(Parent.prototype); Child.prototype.constructor = Child; ``` - Class继承:ES6语法糖,通过`class`和`extends`关键字实现,本质还是基于原型链,但语法更接近传统面向对象,包含`super`关键字用于调用父类构造函数。 ```javascript // Class继承示例 class Parent { constructor() { this.name = 'parent'; } sayName() { console.log(this.name); } } class Child extends Parent { constructor() { super(); // 必须调用super()才能使用this this.age = 18; } } ``` - 核心区别:Class继承更规范,强制要求`super()`调用,避免原型链混乱;原型继承需手动处理构造函数指向,易出现`constructor`丢失等问题。 ### 2. React中useState的更新是同步还是异步?为什么?如何获取更新后的值? - **解题思路**: - 更新特性:在React合成事件(如`onClick`)和生命周期钩子中,`useState`的更新是异步的;在原生事件(如`addEventListener`绑定的事件)和`setTimeout`中,更新是同步的。 - 原因:React为优化性能,会将多个状态更新合并成一次重新渲染,减少DOM操作次数,因此在合成事件中会批量处理状态更新。 - 获取更新后的值: - 方法1:使用`setState`的函数形式(`setCount(prev => prev + 1)`),通过prev参数获取最新状态。 - 方法2:使用`useEffect`监听状态变化,在回调中获取更新后的值。 ```javascript const [count, setCount] = useState(0); useEffect(() => { console.log('更新后的值:', count); }, [count]); // 依赖count,count变化时执行 ``` ### 3. 什么是前端工程化?主要包含哪些内容?如何通过Webpack实现代码分割? - **解题思路**: - 前端工程化:是将前端开发流程规范化、自动化、高效化的一系列方法论和工具链,解决传统开发中依赖管理混乱、代码冗余、部署繁琐等问题。 - 主要内容:模块化(ES Module/CommonJS)、组件化(封装可复用UI)、自动化构建(Webpack/Vite)、代码规范(ESLint/Prettier)、测试(Jest/Cypress)、CI/CD(持续集成/部署)。 - Webpack实现代码分割: - 方式1:通过`splitChunks`配置提取公共依赖(如第三方库)。 ```javascript // webpack.config.js module.exports = { optimization: { splitChunks: { chunks: 'all', // 对所有类型的chunk(同步/异步)进行分割 cacheGroups: { vendor: { // 提取node_modules中的依赖 test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all' } } } } }; ``` - 方式2:使用动态`import()`语法实现路由或组件的按需加载(异步加载)。 ```javascript // React中路由懒加载示例 import { lazy, Suspense } from 'react'; const Home = lazy(() => import('./Home')); // 使用时用Suspense包裹 <Suspense fallback={<div>Loading...</div>}> <Home /> </Suspense> ``` ### 下一步迭代建议 需要我针对这些题目补充对应的面试易错点和延伸知识点吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/25 22:45:24

中小企业如何选择iPaas系统集成平台

连趣云 iPaaS&#xff1a;中小企业也能轻松用得起的集成平台 什么是 iPaaS iPaaS&#xff08;Integration Platform as a Service&#xff0c;集成平台即服务&#xff09;是一种基于云计算的集成解决方案&#xff0c;通过提供预构建的连接器、API 管理工具和可视化工作流引擎…

作者头像 李华
网站建设 2025/12/24 12:29:51

深入浅出Vue 响应式原理:从Object.defineProperty 到 Proxy

本人承接各种网站、跨端、小程序等开发项目&#xff0c;有需要可私信我 大家好, 今天我们来聊一聊 Vue 框架中最核心的部分——响应式系统。 引言&#xff1a;为什么响应式是 Vue 的灵魂&#xff1f; 响应式是Vue的灵魂&#xff0c;因为它实现了Vue最核心的承诺&#xff1a;数…

作者头像 李华
网站建设 2025/12/11 0:10:54

Spring Boot 4.0 新特性整合 MyBatis-Plus 完整教程

Spring Boot 4.0 整合 MyBatis-Plus 完整教程注&#xff1a;Spring Boot 4.0 &#xff0c;本教程基于 Spring Boot 4.0 的预览版和新特性预期进行构建。实际发布时可能会有调整。一、Spring Boot 4.0 新特性概述 1.1 主要新特性 Java 21 支持&#xff1a;基于虚拟线程的响应式编…

作者头像 李华
网站建设 2025/12/29 11:20:20

Spring Cloud Alibaba 微服务整合自定义日志注解完整教程

Spring Cloud 2025.0.0 整合自定义日志注解完整教程本教程基于 Spring Cloud 2025.0.0 新特性&#xff0c;包含虚拟线程、响应式编程、AOT 原生编译支持一、技术栈和架构 1.1 技术选型 Spring Cloud 2025.0.0 (代号: 2025.0.0)Spring Boot 4.0Java 21 (支持虚拟线程)响应式编程…

作者头像 李华
网站建设 2025/12/11 0:10:46

Java占位符全览

格式化输出的实用指南在 Java 中&#xff0c;占位符是格式化字符串输出的利器&#xff0c;让动态生成文本变得简单而优雅。无论是控制台输出、日志记录还是生成报告&#xff0c;掌握这些占位符都能让你的代码更加简洁专业。--------------------------------------------------…

作者头像 李华
网站建设 2025/12/24 2:39:31

IO流——解压缩流/压缩流

一、解压缩流/压缩流1.2 解压缩流1.2.1 什么是解压缩流&#xff1f;解压缩流是Java I/O系统中专门用于读取压缩文件的流&#xff0c;它能将压缩后的数据恢复为原始格式。简单来说&#xff0c;就是把.zip、.gz这些压缩文件"打开"的工具。1.2.2 主要解压缩类Java提供了…

作者头像 李华