es6常见面试题

1、let和var的区别

let:没有变量提升过程,必须先声明再使用

存在暂时性死区

不能重复声明,但是可以重新赋值

拥有块级作用域

var: 是全局变量,存在变量提升过程,可以先使用在声明

可以重复声明

2、箭头函数有哪些特性

1、箭头函数是匿名函数,不绑定自己的this,arguments,super,new.target

2、箭头函数会捕获其所在上下文的this值,作为自己的this值,在使用call/apply绑定时,相当于只是传入了参数,对this没有影响

3、箭头函数不绑定arguments,取而代之用rest参数…解决

4、箭头函数当方法使用的时候,没有定义this绑定

5、箭头函数不能作为构造函数,和 new 一起用就会抛出错误

6、箭头函数没有原型属性

7、不能简单返回对象字面量,要用(包起来)

3、利用set实现数组的过滤

var arr=[1,2,3,1,2]

var newArr=[...new Set(arr)]

4、es6字符串模板的好处

1、可以使用回车和换行

2、不用考虑引号的嵌套问题,但是不能反引号嵌套反引号

3、可以直接解析简单的js表达式

4、模板字符串为构造多行字符串和字符串拼接带来了更加方便的方式。

5、同一个模板字符串可以通过使用不同的标签,对模板进行进一步处理,输出不同的结果

5、手写Promise

var p = new Promise((resolve,reject)={

if(1){

resolve(‘成功’)

}

else{

reject(‘失败’);

}

})

p.then((res)=>{}).catch((err)=>{})

6、谈谈你对async/await的理解

async...await是基于promise的generator语法糖,它用来等待promise的执行结果,常规函数使用await没有效果;

async修饰的函数内部return不会得到预期的结果,会得到一个promise对象;

await等待的promise结果是resolve状态的内容,await 可以阻塞后面代码的执行,reject状态的内容需要使用try...catch获取,

await关键字必须要出现在async修饰的函数中,否则报错。

7、class中的super有哪些用法

Super在类中有两种用法,一个是super方法,一个是super对象;

super方法只能出现在constructor方法中,

super对象一般出现在子类覆盖父类的方法中。

8、静态和成员的区别

静态的变量或方法归类所有,全局独一份,

成员的变量或方法归对象所有,每次实例化对象成员方法和成员变量就会得到一份拷贝;

对于一些通用性的属性或方法,可以考虑设置为静态。

9、谈谈你对promise的理解

Promise用来解决异步回调问题,由于js是单线程的,很多异步操作都是依靠回调方法实现的,这种做法在逻辑比较复杂的回调嵌套中会相当复杂;也叫做回调地狱;promise用来将这种繁杂的做法简化,让程序更具备可读性,可维护性;

promise内部有三种状态,pedding,fulfilled,rejected;pedding表示程序正在执行但未得到结果,即异步操作没有执行完毕,fulfilled表示程序执行完毕,且执行成功,rejected表示执行完毕但失败;这里的成功和失败都是逻辑意义上的;并非是要报错。

其实,promise和回调函数一样,都是要解决数据的传递和消息发送问题,promise中的then一般对应成功后的数据处理,catch一般对应失败后的数据处理。

10、深拷贝的原理

Js的深拷贝发生在对象的赋值上,对象赋值的时候仅仅是一个引用赋值,也就是说两个不同变量名指向的是同一份内存空间;基本数据类型则不存在这样的行为;要完成对象的深拷贝需要使用递归遍历所有对象的属性进行赋值,也可以使用JSON.stringfy和JSON.parse操作。

https://blog.csdn.net/qq_38974956/article/details/109034790

 

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页