Mark 一下之前玄武科技面试时做的笔试题~ 虽然不知道是不是每一个人都是一样的试题
1. new操作符到底做了什么
- 创建一个空的对象
var obj=new Object();
- 让空对象的原型属性指向原型链,设置原型链
obj._proto_=Func.prototype;
- 让构造函数的this指向obj,并执行函数体
var result=Func.call(obj);
- 判断返回类型,如果是值就返回这个obj,如果是引用类型,返回这个引用对象。
答案转自:https://www.cnblogs.com/theworldofbeisong/p/9582665.html
2. Promise 和 setTimeout 执行先后的区别
首先要了解一下Event Loop(事件循环)
:
js
是单线程语言,浏览器只分配给js
一个主线程用来执行任务(函数)【形成执行栈
】,每次只能执行一个任务。这些任务就形成了任务队列排队等候执行。
某些任务很耗时(如网络请求、定时器和事件监听)浏览器会开辟另外的线程,这些任务是异步。
执行的先后顺序:
- 首先执行栈里的任务;(就是同步任务)
- 执行栈清空后,检查微任务队列,将可执行的微任务全部执行;
- 取出宏任务队列中的第一项执行;
- 回到第二步再次检查。
异步任务又分宏任务和微任务。
- 宏任务:事件队列中的每一个事件都是一个宏任务
(优先级:主代码块
>setImmediate
>MessageChannel
>setTimeout / setInterval
) - 微任务:
优先级:process.nextTick
>Promise
>MutationObserver
主程序和和settimeout都是宏任务,两个promise是微任务
答案详解参考:https://www.cnblogs.com/sunmarvell/p/9564815.html
3. vue 中的 key 主要是解决哪一类问题,为什么不建议用索引 index
key
的作用主要是为了高效的更新虚拟DOM
- 当以
index
为key
值时,如果数组长度发生变化,会导致key
的变化,比如删除其中某一项,那么index
会相应变化。
所以用index
作为key
和不加index
没有什么区别,都不能提升性能。
一般用每项数据的唯一值来作为key
,就算数组长度变化,也不会影响到这个key
答案转自:https://www.cnblogs.com/liandudu/p/14276826.html
4. 详细说一下小程序Page 和 Component的生命周期钩子函数,以及工作内容?
- Page 生命周期:
- onLoad:页面创建时执行
- onShow:页面出现在前台时执行
- onReady:页面首次渲染完毕时执行
- onHide:页面从前台变为后台时执行
- onUnload:页面销毁时执行
- Component 生命周期:
5. 浏览器缓存有哪些?通常缓存哪几种?
http缓存
是基于HTTP协议的浏览器文件级缓存机制。websql
这种方式只有较新的chrome浏览器支持,并以一个独立规范形式出现indexDB
是一个为了能够在客户端存储可观数量的结构化数据,并且在这些数据上使用索引进行高性能检索的 APICookie
一般网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)Localstorage
html5的一种新的本地缓存方案,目前用的比较多,一般用来存储ajax返回的数据,加快下次页面打开时的渲染速度Sessionstorage
和localstorage类似,但是浏览器关闭则会全部删除,api和localstorage相同,实际项目中使用较少。application cache
是将大部分图片资源、js、css等静态资源放在manifest文件配置中cacheStorage
是在ServiceWorker的规范中定义的,可以保存每个serverWorker申明的cache对象flash缓存
这种方式基本不用,这一方法主要基于flash有读写浏览器端本地目录的功能
答案转自:高先生_前端题库https://www.kancloud.cn/z591102/interview/945466
里面有很多前端题可以看看~
6. 如何给数组去重
let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(newArr);// [1, 2, 3, 4]
答案来源以及关于reduce详细讲解:https://www.jianshu.com/p/e375ba1cfc47
7.如果有10个以上的请求,需确保所有请求都通过才能继续运行其他的逻辑,可以使用什么方法?假设还需要保证所有请求的先后顺序?可以使用什么方法?
想到了async 和 await 搭配使用【欢迎评论补充详解(/ω\)】