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