Node.js后端面试题

1.ES6有哪些特性?

答:let of ; map/set ; filter ; forEach ; 解构; 箭头函数 ; Promise ; 模板字符串 ;
generator ; 类的支持 ; const / let。

// let of 
const arr = [10, 20, 30, 50];
for (let content of arr) {
    console.log(content)
}
// map set 

// filter
const arr2 = [10, 20, 30, 40];
const result = arr2.filter(value => value > 20);
console.log(result);

// forEach
const arr3 = [10, 20, 30, 40, 50];
arr3.forEach((value, index, array) => {
    console.log(value, index, array);
})

// 解构
const data = { name: 'jone', age: 17, adress: "beijin" };
const { name, age } = data;
console.log(name, age);

// 箭头函数
const f = (value) => {
    console.log(value);
}
f(5)

// Promise 

// 模板字符串
const value1 = 'beijing';
const value2 = 'shanghai';
const h = `form ${value1} to ${value2}`;
console.log(h);

// generator

// class

// const let 

2.apply、call、bind有什么区别?

const obj = {
    name: '老王',
    age: 19,
    myFun: function (from, to) {
        console.log(`${this.name}年龄 ${this.age} 来自${from} 去往 ${to}`);
    }
}
const db = {
    name: '德玛',
    age: 99,
}
obj.myFun.call(db, '成都', '上海'); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.apply(db, ['成都', '上海']); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.bind(db, '成都', '上海')(); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.bind(db, ['成都', '上海'])(); // 德玛 年龄 99 来自 成都, 上海去往 undefined

3.什么是闭包,闭包有哪些用处?

答:闭包就是作用域范围,因为js是函数作用域,所以函数就是闭包,全局函数的作用域范围就是全局。

闭包举例:防抖、节流、once

  • 防抖:周期内有新事件触发,清除旧定时器,重置新定时器
// 防抖 
function debounce(fn) {
    let timer = null;
    return function () {
        clearTimeout(timer);
        timer = setTimeout(() => {
            fn.apply(this, arguments);
        }, 3000)
    }
}

const f = debounce(value => {
    console.log(`start ${value}`);
});
setTimeout(() => {
    f(1);
}, 1000);
setTimeout(() => {
    f(2);
}, 2000);
setTimeout(() => {
    f(3);
}, 3000);
// 1 2 3 秒后执行,f() 最后执行结果:start 3 证明防抖成功
  • 节流:周期内有新事件触发,直接执行旧事件。
// 节流
function throttle(fn) {
    let tag = true;
    return function () {
        if (!tag) return;
        tag = false;
        setTimeout(() => {
            fn.apply(this, arguments);
            tag = true;
        }, 3000)
    }
}
const f = throttle(value => {
    console.log(`start ${value}`);
});
setTimeout(() => {
    f(1);
}, 1000);
setTimeout(() => {
    f(2);
}, 2000);
setTimeout(() => {
    f(3);
}, 3000);
// 执行结果:start 1 证明节流成功
  • once:只执行一次
function once(fn) {
    let tag = false;
    return function () {
        if (!tag) {
            fn.apply(this, arguments);
            tag = true;
        }
    }
}
const f = once(value=>{
    console.log(`支付:${value}$ 成功`);
});
f(5);
f(5);
// 只会执行一次

4.列举数组相关的常用方法?

答:push/pop ; shift/unift ; split/join ; slice/splice/concat ; sort/ reverse ; map/redcuce ; forEach;filter

5.列举字符串相关的常用方法?

答:indexOf;lastIndexOf;charAt;split;match;test;slice;substring;substr;toLowerCase;toUpperCase

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值