1. 说⼀下你对 promise 的理解?
1.1 什么是 promise?通过 promise 能够解决什么问题?
promise 是一种异步的解决方案,就是把回调函数的写法变成链式写法,promise 是一个容器,里面可以放异步操作。
promise 能解决回调地狱的问题。
什么是回调地狱?
回调地狱就是回调函数嵌套回调函数,比如要拿到 a 接口的数据后才能请求 b 接口,拿到 b 接口的数据后才能请求 c 接口,这样的写法非常臃肿不易维护。用 promise 可以变成链式的写法,比着回调地狱的写法会更加的美观和方便维护,解决回调地狱 promise 还不是最终的方案,终极解决方案是 async 和 await,async 函数就是把异步的代码变成同步的写法。
1.2 说⼀下 promise 的特点?也就是三种状态?
promise ⼀共有三个状态,分别是进⾏中,已成功或者已失败,如果成功的话可以通过 resolve ⽅法将正确结果返回出去,通过.then 的⽅式进⾏接收;失败的话可以通过 reject 的⽅式将失败的结果返回出去,通 过.catch 的⽅式进⾏接收;pending 状态是进⾏中,⼀旦进⾏之后,他的状态是不可逆的。
1.3 说⼀下 promise 怎么⽤?
使用 promise 的时候需要实例化 new Promise(),里面接收一个回调函数作为参数,这个回调函数里有两个参数:一个是 resolve ,一个是 reject ,可以通过实例化对象调用 then 和 catch,实例化对象除了可以调用 then 和 catch 之外还有一个方法是 finilly,就相当于是完成的意思,不管成功还是失败都会执行这个方法。
1.4 在说⼀下 promise 的 all ⽅法和 race ⽅法?
这两个方法是构造函数的方法所以直接被 Promise 调用,他们两个方法都是把多个接口放在一起请求,all 全部,都请求到了才执行 then,race 赛跑,谁先执行完成谁就先执行 then。
1.5 在说⼀下在项⽬中使⽤ promise 做过什么?
在原生的微信小程序中 因为 wx.request 本身不是一个 promise 对象 所以我们把他封装成了一个 promise 对象,就能用 then 和 catch 方法了
我们常用的 jq 的 ajax 和 axios 本身就是一个 promise 所以我们可以直接用 then 和 catch 方法
2. 原生 ajax 的步骤
1. 创建 xhr 对象
2. 创建和服务器的链接
3. 发送请求
4. 等待服务器的响应 并且拿到响应数据
3. 说⼀下 async 和 await、以及他们和 promise 的区别?
⾸先 async 和 await 是解决异步的终极⽅案,他是 generatal 的语法糖。async 和 await ⼀般配和使⽤,当我们给函数前⾯加上关键字 async,这个时候,这个函数的返回值就是⼀个 promise。⽽ await 是⼀个同步的操作,await 只能配合 async 使用,不然会报错,await 后⾯可以是表达式,也可以是⼀个 promise。在 await 下⾯的代码必须得等待 await 执⾏完之后才能执⾏。
他们和 promise 的区别就是在写法上更加的简洁。
4. 说⼀下 es6 新增的特性有那些?
1. 新增了变量声明⽅式,也就是 let 和 const
2. 新增了解构赋值
3. 新增了一些数组⽅法、字符串⽅法、正则表达的⽅法、函数的⼀些写法和对象的⽅法
4. promise
5. async、await
6. class 以及 继承
7. 模块化
8. 新的数据类型
5. 说⼀下箭头函数与普通函数的区别?
在 es6 中,提供了⼀种简洁的函数写法,我们称作“箭头函数”。
写法:函数名=(形参)=>{……} 当函数体中只有⼀个表达式时,{ }和 return 可以省略,当函数体中形参只有⼀个时,()可以省略。
特点:
箭头函数中的 this 始终指向箭头函数定义时的离 this 最近的⼀个函数,如果没有最近的函数就指向 window。
区别:
1. 箭头函数不能⽤于构造函数,不能使⽤ new\*\* ⽽普通函数可以
2. 在普通函数中,this 总是指向调⽤它的对象,如果⽤作构造函数,this 指向创建的对象实例,
⽽箭头函数指向箭头函数定义时的离 this 最近的⼀个函数,如果没有最近的函数就指向
window。
6. 说⼀下 for in 与 for of 的区别?
for in 可以遍历对象 ⽽ for of 遍历对象会报错;
for in 遍历数组得到的数组的下标, ⽽ for of 遍历得到的时候数组⾥⾯的每⼀个元素。