面试题20210301

2021-03-01  本文已影响0人  大萝蓓

1、for…in 和for…of有什么区别
for ...in循环的是key,for...of循环的是value。
for...of适用于遍历数组、字符串、map、set等,但是不能遍历对象。
2、promise有哪些参数 all()方法?
状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)
局限性:
首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。
其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。
第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
当接收到一个代表错误的 HTTP 状态码时,从 fetch() 返回的 Promise 不会被标记为 reject, 即使响应的 HTTP 状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok 属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject。
参数
all()方法:promise的all方法提供并执行异步操作的能力,并且在所有异步操作执行完成才执行回调
如果没懂请跳转:
Promise实用方法Promise.all和Promise.race
https://www.jianshu.com/p/2ee86b5e00e3
3、all()方法的原理?
答:Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。该方法提供了并行执行异步操作的能力,并且在所有异步操作执行完并且执行结果都是成功的时候才执行回调。
通常我们在使用异步的时候都是只有一个Promise,现在我们使用all()方法包装多个Promise实例。
语法很简单:参数只有一个,可迭代对象,可以是数组,或者Symbol类型等。

Promise.all([asyncTask(1),asyncTask(2),asyncTask(3)])
.then(resultList => {
    console.log('results:',resultList);
});
//等同于
Promise.all([
  new Promise(function(resolve, reject) {
    resolve(1)
  }),
  new Promise(function(resolve, reject) {
    resolve(2)
  }),
  new Promise(function(resolve, reject) {
    resolve(3)
  })
]).then(arr => {
  console.log(arr) // [1, 2, 3]
})

因为我们传入的是数组,那么返回的必须是数组,并且会将讲过进行映射。
4、Set 和 Map 数据结构
set
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
weakset
WeakSet 的成员只能是对象,而不能是其他类型的值。
WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
map
值—值对应的关系。“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键
Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键
如果 Map 的键是简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map 将其视为一个键
weakmap
WeakMap与Map的区别有两点:
首先,WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。
其次,WeakMap的键名所指向的对象,不计入垃圾回收机制。
注意:WeakMap 弱引用的只是键名,而不是键值。键值依然是正常引用。
5、跨域的解决方案?
6、你用的element-ui有没有自己封装过组件?
7、页面布局?(没明白问的技术点在哪)
8、vue的响应式原理?
9、jsonp的跨域原理?
答:客户端向服务端发送请求,传递过去一个函数,服务端接受到客户端发送的请求,拿到传过来的函数,准备好返回的数据,返回给客户端一个字符串,这个字符串就是客户端发过来的函数名+JSON格式的数据,客户端接收到。

上一篇下一篇

猜你喜欢

热点阅读