分析几道经典但依然超难做的前端面试题

简介: 分析几道经典但依然超难做的前端面试题

最近我的一些学员比较膨胀,认为已经精通了 HTML、CSS、JavaScript 三剑客,老是催我进入框架学习和项目实战。

为了让他们意识到自身的不足,我搬出了几道经典前端面试题,毫无例外,全员覆灭。


1. a 应该等于什么可以让下面的 console.log 输出 true?


const a = void 0;
console.log(a == 1 && a == 2 && a == 3);// true


2. 实现 sum 函数,参数为数组,求该数组所有项之和,不允许使用循环和数组方法


const arr = [1, 2, 3, 4, 5]
function sum (arr) {
  // TODO:
}
sum(arr);// 15


3.请说出如下代码的输出


var x;
let y;
var z;
if(true) {
  let z;
  x();
  console.log(z);
  x = 1;
  function x(z) {
    z = 4;
  }
  function y(z) {
    z = 3;
  }
  z = () => {}
  y(z);
  console.log(z);
  x = 2;
  console.log(x);
}
console.log(x);
console.log(y);
console.log(z);


题解


1


这一题是在考察隐式类型转换。

当两个类型不一样的变量进行双等于比较时,会调用它的 valueOf 方法,并使用 valueOf 方法返回的值进行比较。

我们只需要定义一个初始为 1 的属性,每次调用时让它增加 1 就可以了。


var a = {
  n: 1,
  valueOf() {
    return this.n++;
  }
}


2


这一题是在考察递归。

遍历一个数组中的所有子项,能用到的方法只有循环和递归。

首选需要分析递归公式。

假设有个内部函数 _sum,该函数接受 i 作为参数,可以计算出从数组第 i 位到数组末尾之和。

基于这个函数,我们还可以推演出一个递推公式:_sum(i) = arr[i] + _sum(i + 1)。

最后再来分析边缘情况,当参数 i 大于等于数组的 length 之后,就无法求和了,所以这时返回 0。


function sum(arr) {
  function _sum(i) {
    if(i >= arr.length) return 0
    return arr[i] + _sum(++i)
  }
  return _sum(0)
}


3


这一题是在考察作用域。

但是题出得确实有点丧心病狂。

第 8 行输出 undefined。这个比较简单,因为调用 x 时没有传递参数,所以 x 函数中改变的 z 是 x 的参数,和外层的 z 无关。

第 18 行输出 ()=>{}。因为 15 行将 z 设置成了箭头函数,16 行调用了 y,但是在 y 中修改的是函数作用域内的参数,而不是外层的 z。

第 20 行输出 2,毫无疑问。

第 23 行输出 1,这就有点难以理解了。第 9 行代码会把外层的 x 设置为 1,但是第 10 行代码会在 if 块级作用域中创建一个函数 x。在此之后 x 的访问,都是在访问块级作用域中的 x,和外部的 x 无关。

第 24 行输出 undefined,因为外层的 y 是通过 let 声明,会形成块级作用域,if 中的函数 y 不会提升。

第 25 行输出 undefined,因为 if 块中有使用 let 声明 z,所以 z 存在块级作用域,不会起到变量提升的效果。

说实话这些题目看上去头很刁难人,但确实又是在考察基础的编程语言能力。不乏一些老手程序员也在这些「初级面试题」上面翻了跟头。

你答对了几道题呢?



相关文章
|
2月前
|
人工智能 前端开发 架构师
2025年前端局势分析,我该不该转行?
2024年,前端领域经历了快速变化,AIGC的兴起和市场HC减少使得前端工程师面临挑战。尽管AI工具如通义灵码和Cursor能高效生成代码,但AI无法完全取代前端工程师,因其缺乏逻辑、沟通和创新能力。前端工作不仅限于编码,还包括需求分析、代码评审等。未来,前端不会“死亡”,而是持续演变。面对大环境的压力,提升综合能力、拥抱变化、持续学习和保持身心健康是关键。转型方向包括升管理、做架构师或转讲师等。稳住2025年,需适应变化、不断学习并探索更多可能性。
353 16
|
3月前
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
4月前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
127 1
|
4月前
|
JavaScript 前端开发 API
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第26天】前端技术的飞速发展让开发者在构建用户界面时有了更多选择。本文对比了Vue.js和Angular两大框架,介绍了它们的特点和优劣,并给出了在实际项目中如何选择的建议。Vue.js轻量级、易上手,适合小型项目;Angular结构化、功能强大,适合大型项目。
150 1
|
4月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
102 1
|
5月前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
111 2
|
6月前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
7月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
137 57
|
7月前
|
存储 XML 移动开发
前端大厂面试真题
前端大厂面试真题
|
5月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题

热门文章

最新文章

  • 1
    前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy
  • 2
    从前端视角聊聊通义灵码使用经验,如何更好地提升研发效率
  • 3
    VSCode AI提效工具,通义灵码前端开发体验
  • 4
    【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
  • 5
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
  • 6
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
  • 7
    【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
  • 8
    无前端经验如何快速搭建游戏站:使用 windsurf 从零到上线的详细指南
  • 9
    AI程序员:通义灵码 2.0应用VScode前端开发深度体验
  • 10
    构建高效Java后端与前端交互的定时任务调度系统