07.ES6常见面试题(ES6)
小于 1 分钟
面试题一:
const obj = {
name:'gao',
sayHi1:()=>{
console.log(this.name)
},
sayHi2(){
(()=>{
console.log(this.name)
})()
}
}
obj.sayHi1() // ''
obj.sayHi2() // 'gao'
面试题二:
/**
* 下面所有数组不接更改
* 得到一个新数组,键盘价格减20
* 尽量用一行代码解决
* @type {[{price: number, name: string},{price: number, name: string},{price: number, name: string},{price: number, name: string}]}
*/
const products = [
{name: '鼠标', price: 20},
{name: '键盘', price: 40},
{name: '耳机', price: 60},
{name: '显示屏', price: 80}
];
const newProducts = products.map(item => item.name=='键盘'?{...item,price:item.price-20}:item)
console.log(products) // 不改变原数组
console.log(newProducts) // 得到一个新数组,键盘价格减20
面试题三:剩余参数
function getItems(fruitList,...args){
return [...fruitList,...args]
}
console.log(getItems(['apple','orange'],'banana','pear','grape'))
面试题四:柯里化函数
//测试柯里化函数
function currying(fn, ...args1) {
return function (...args2) {
const args = [...args1, ...args2];
if (args.length < fn.length) {
return currying(fn, ...args);
} else {
return fn(...args);
}
}
}
const sum = (a, b, c, d) => a + b + c + d;
const res1 = currying(sum)(1)(2)(3)(4);//10
const res2 = currying(sum,1)(2)(3)(4);//10
const res3 = currying(sum,1,2)(3)(4);//10
console.log(res1, res2, res3);
// const currying = (fn, ...args) => {
// if (args.length >= fn.length) {
// return fn(...args);
// }
// return (...args2) => currying(fn, ...args, ...args2);
// };