最近一直在投简历,包括前端react,和后端的node。 5月20号面了一家后端的岗位,在这记录一下面试题和总结
(1)
let list = ['b', 'c']; // 请将list变成['a','b','c'];
当时记得有一个函数可以直接达成类似的目的,但是要求是不能查资料。所以我的第一做法是、
let list2=['a'];
list.forEach(
ele=>{
list2.push(ele)
}
)
list = list2;
后来经过面试官提醒,想到函数名是unshift, 和shift对应。 所以有了
list.unshift('a');
以及es6特性
list=['a',...list];
(2) 请介绍一下const和let的区别,我当时主要回答的点在于const是指向固定地址,不能改变他的reference。答题之后我参考了一下文章 chinese.freecodecamp.org/news/javasc… 总结如下:
- var的作用域是全局或者function,如果用var在最外层函数外声明变量则该变量作用域(scope)是window。如果在函数内部则是该函数内。而 let和const的scope是块级作用域,也就是被{}包裹的代码块
- var声明的变量即可以被赋值,也可以被再次定义, let 声明的变量可以被赋值但是不能被二次定义, const声明的基础变量不可被赋值,const声明的对象可以被修改但是不能改变指向地址。 具体细节有一位大佬已经讲的非常清楚了 传送门在这 juejin.cn/post/684490…
- 关于变量提升, 这里var 会将声明的变量提升到作用域顶部并赋值为undefined。 let和const也会提升到顶部但是只声明并没有初始化。 (3) 请定义一个函数mul,计算三个数的乘积,例如mul(2)(3)(4). 这里首先考虑两个数的乘积
let mul = (num) => {
return (num2) => {
return num * num2;
};
};
let a = mul(3);
console.log(a(2)); //6
那拓展到3个数字就是一样的道理了
let mul = (num3) => {
return (num) => {
return (num2) => {
return num * num2 * num3;
};
};
};
let a = mul(3)(2)(4);
console.log(a); 、、24
箭头函数写法
let mul= num1=>num2=>num3=> num1*num2*num3
console.log(mul(2)(3)(4));//24