2026/4/11 7:39:18
网站建设
项目流程
h5制作平台下载,贵阳seo计费管理,wordpress会员收费插件,网站建设公司 电话销售没什么效果以下是几道前端面试中高频且能体现综合能力的题目#xff0c;涵盖 JavaScript 深入理解、框架原理和工程化实践#xff0c;附详细解题思路#xff1a;1. 请解释 JavaScript 中的原型继承与 Class 继承的区别#xff0c;并用代码举例说明解题思路#xff1a;原型继承#…以下是几道前端面试中高频且能体现综合能力的题目涵盖 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]); // 依赖countcount变化时执行 ### 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{divLoading.../div} Home / /Suspense ### 下一步迭代建议 需要我针对这些题目补充对应的面试易错点和延伸知识点吗