2020年底前端面试题汇总(react向)
1. async await实现原理
async只是generator的语法糖,async 就等于Generator+自动执行器。
async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
async函数内部return语句返回的值,会成为then方法回调函数的参数。
2.vue双向数据绑定的实现原理
通过Object.defineProperty()来实现对属性的劫持,达到监听数据变动的目的
3.import和require的区别
require是运行时调用,所以可以随处引入
import是编译时调用,必须放在文件开头引入,目前部分浏览器不支持,需要用babel把es6转成es5再执行
4.装饰器
装饰器是一个对类进行处理的函数。装饰器函数的第一个参数,就是所要装饰的目标类。
5.js的设计模式
6 proxy和Object.defineProperty的区别
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。
7. js的基本数据类型
基本类型:string, number, null, bolean, undefined, symbol, bigInt
复杂类型: object、function、array、regexp、set、map、date、weakset、weakmap等等
Symbol,表示独一无二的值
null:此处应该是个对象,但当前没有值
undefined:变量未被赋值时的初始值
8. promise和async的区别
async返回promise,是对promise的封装
9. H5的本地缓存
localStorage: 方法存储的数据没有时间限制。
sessionStorage: 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。
.setItem( key, value) 将value存储到key字段。
.getItem(key) 获取指定key本地存储的值。
10 MVVM和MVC的区别
11 闭包的作用
常驻内存,不污染全局
12 link和@import的区别
@import是css提供的语法规则,只能导入样式表的作用,link是html提供的标签
加载页面的时候,link引入的css会同时加载,@import引入的css将在页面加载完毕被加载
link引入样式权重大于@import引入的样式
13.xml和json的区别
1.xml是重量级的,json是轻量级的
2.xml在传输过程中比较占用宽带,json占用比较小,易于压缩
3.xml多用于配置文件,json用于数据交互
14.apply bind call的区别
apply:改变函数一次执行的this值,传入指定this和参数数组
call:改变函数一次执行的this值,传入指定this和其他参数
bind:返回一个固定this的函数,参数是指定this
15.高阶组件
高阶组件就是参数为组件,返回值为新组件的函数
HOC不会修改传入的组件,也不会修改使用继承来复制其行为,相反,HOC通过将组件包装在容器组件来组成新组件。HOC是纯函数,没有副作用
可以通过自定义hook来取代HOC
16 react调用useState执行了什么
react会将当前传入的参数对象与数组当前的状态合并,然后出发调和过程,在掉和过程中,react会以相对高效的方式根据新的状态构建react元素并且重新渲染整个ui界面
setState本质上是通过一个队列机制实现state更新,执行setSyaye时,会将需要更新的state合并后放入状态队列,而不会立即更新state,队列机制可以批量更新state
17 ==和===的区别
===比较类型和值,==只比较值。
18 Set和Map
Set是一个构造函数,可以生成一个没有重复值的数组
Map是一段任意key值的的键值对的集合
WeakSet只能放入对象
WeakMap只接受对象作为键名
19 Symbol
Symbol保证每一个属性名都是独一无二的值,这样防止了属性名的冲突,对象的属性名可以有两种类型,一种是字符串,一种是Symbol类型,凡是属性名属于Symbol的,都是独一无二的,保证不会与其他属性名产生冲突
20 typeof和instanceof的区别
typeof判断所有基础类型,返回值:number,string,undefined,boolean
interfaceof可以对不同的对象进行判断,判断方法是根据对象的原型链依次向上查询,如果pbj1的原型链存在obj1的原型链上,值返回true
21 跨域的原因和解决方法
浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域,跨域问题来源于浏览器的同源策略,即只有协议、主机名、端口号相同,则允许相互访问
解决方法:
- JSONP通过script向服务器发起请求,需要指定一个回调函数,服务器会将该数据放在回调函数的参数里,只能发送get请求,有点是简单适用,支持所有的浏览器
- webscoket是一种通讯协议,不实行同源策略,在请求头中有oririn属性标记了请求源,缺点是必须支持webscoket的服务器才支持
- nginx反向代理,通过nginx解析url地址的时候进行判断,将请求转发到具体的服务器上,这里发出的请求和真正的请求有映射关系
- cors:...