朋友研究生一年经验,base北京某大厂
一面
时间:20220517
状态:未知
1. 箭头函数和普通函数的区别,下面的输出
var name = "global";
var obj = {
name: "ngnce",
log:()=> {
console.log(this.name);
}
}
obj.log()
区别:
- 箭头函数无arguments对象
- 箭头函数内部的this与其自身的调用无关系,与它上层(声明位置)this指向相同。
- 箭头函数无prototype属性,无法作为构造函数
输出
global,log函数里面的this与它外层的this相同,所以指向window
2. promise
-
Promise.all、Promise.allSettled的区别 两者主要是在遇到什么情况就返回上的区别。 Promise.all 在全部给定promise全部resolve或者某个reject的时候就会返回结果。更适合彼此次昂户以来或者任何一个reject时理解结束。
Promsie.allSettled在所有给丁的promise都已经fullfilled或rejeced后的promise,并带有一个数组,每个对象对应promise的结果。
看示例: -
Promise.all 给定promise全部resolve
const p = Promise.all([1,2,3]);
// p是一个promise对象,状态是fulfilled
Promise.all 给定的promise其中一个reject
// 此时会报错,因为没有对异常进行处理
const p2 = Promise.all([1,Promise.reject(2),3]);
const p2 = Promise.all([1,Promise.reject(2),3]).catch(err => console.log(err));
Promise.allSettled 给定promise全部resolve
// p3是一个promise对象,状态是fulfilled
const p3 = Promise.allSettled([1,2,3]);
Promise.allSettled 给定的promise其中一个reject
// p4是一个promise对象,状态是fulfilled
const p4 = Promise.allSettled([1, Promise.reject(2), 3]);
- promise.all中第2个promise,reject,第3个promise还会执行么? 会执行。
const p1 = new Promise(resolve => {
console.log('promise1');
resolve('promise1')
});
const p2 = new Promise((resolve, reject) => {
console.log('promise2');
reject('promise2 error')
});
const p3 = new Promise(resolve => {
console.log('promise2');
resolve('promise3')
});
Promise.all([p1, p2, p3]);
3. Vue
vue里component { data: function() {return {} }},data可以返回对象也可以返回函数,为什么?
【其实看到这个题,我不知道该怎么回答,说说我的理解吧】
如果说为什么可以对象也可以返回函数,这个就和vue框架设计有关了,vue源码对data处理的时候,就支持两种方式。
如果我们传入的是对象的时候,如果这个组件被多个地方使用的时候,data将会共享。
4. 谷歌插件通信
chrome插件background.js和content.js通信用什么,popup.js和content.js通信用什么?
【没看懂这个题要考察啥,有知道的兄弟可以评论解答下】
5. 盒模型
标准盒模型:box-sizing: content-box
(默认),盒子的实际所占据的宽度为 width+padding
怪异盒模型(又称IE和模型):box-sizing: border-box
,盒子的实际占据的宽度为width
6. 协商缓存
协商缓存,是说我们在第一次请求时,(无强缓存的情况),响应头会返回Last-Modified
或者Last-Match
两个字段和值,后者优先级更高。第二次请求的相同资源的时候,请求头会带上If-Modifed-Since
或者If-None-Match
字段,值为前面服务端返回的值,如果命中协商缓,则本次请求http code状态码为304,并更新前面两个字字段的值;如果没有命中状态,状态码200,并返回资源。
更多内容:强缓存和协商缓存
7. 写深拷贝,如果有循环引用,怎么解决?
function deepClone(obj, hash = new WeakMap()) {
if(typeof obj !== 'object' || obj === null) {
return obj;
}
if(hash.has(obj)) {
return hash.get(obj);
}
let res = Array.isArray(obj) ? [...obj] : {...obj};
hash.set(obj, res);
Reflect.ownKeys(res).forEach(key => {
let item = res[key];
res[key] = deepClone(item, hash);
});
return res;
}