**1、前端面试题库 (**面试必备) 推荐:★★★★★
地址:前端面试题库
最近我的一些学员比较膨胀,认为已经精通了 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)
}
### 最后
整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。
**《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》**



**开源分享:https://docs.qq.com/doc/DSmRnRGxvUkxTREhO**