十大高频前端面试题

125 阅读6分钟

一,什么是重绘和重排

重排: 当DOM元素影响了元素的几何属性(例如宽和高),浏览器需要重新计算元素的几何属性,同样其它元素的几何属性也会和位置也会因此受到影响。浏览器会使渲染树中受到影响的部分失效,并重新构造渲染树。这个过程称为“重排”。

重绘: 完成重排后,浏览器会重新绘制受影响的部分到屏幕上中,该过程称为“重绘”。

注意点: 当我们改变DOM的大小,增加删除都会导致重排,当给DOM元素改变颜色的时候,会导致重绘,重排一定会重绘,重绘不会重排。重排会影响性能,所以我们尽快能的减少重排的操作

二,在地址栏输入网址,到数据返回的过程是什么?

  1. 输入url地址后,首先进行DNS解析,将相应的域名解析为IP地址。
  2. 根据IP地址去寻找相应的服务器。
  3. 与服务器进行TCP的三次握手,建立连接。
  4. 客户端发送请求,找到相应的资源库。
  5. 客户端拿到数据,进行相应的渲染。

三,深拷贝和浅拷贝的区别

深拷贝和浅拷贝都是只针对对象和数组这样的引用数据类型的

浅拷贝值复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存的,但是深拷贝会另外创造一个一模一样的对象,新对象跟原对象是不共享内存的,修改新对象不会改变旧对象

浅拷贝是按位拷贝对象,如果属性为文本类型,那么拷贝的就是基本类型的值,如果拷贝的是引用类型,那么拷贝的就是内存地址(object.assign)

深拷贝拷贝对象的多层属性,如果对象里面还有对象,会继续拷贝,使用递归去实现.

四,js的运行机制是什么

js执行过程
js是单线程执行的,页面加载时,会自上而下执行主线程上的同步任务,当主线程代码执行完毕时,才开始执行在任务队列中的异步任务。具体如下:

1.所有同步任务都在主线程上执行,形成一个执行栈。
2.主线程之外,还存在一个"任务队列(eventloop队列或者消息队列)"。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
3.一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。哪些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
4.主线程不断重复上面的第三步。

js的执行顺序

1,同步
2,process.nextTick
3,异步
微任务 : (promise.then)
宏任务 : 计时器,ajax,读取文件
4,setImmediate(当前事件循环结束执行)

五,箭头函数和普通函数的区别

1,this的指向问题

箭头函数中的this在定义的时候就决定的,而且是不可修改的(不可以通过call,apply,bind修改)

箭头函数中的this指向定义时候的,外层的第一个普通函数的this(如果外层没有,就指向Windows)

2,箭头函数不能new(不能当做构造函数)

3,箭头函数没有原型prototype

4,箭头函数中没有argument

六,v-for中为什么要加key

作用:
1.key的作用主要是为了高效的更新虚拟DOM,提高渲染性能。
2.key属性可以避免数据混乱的情况出现。

原理:

1、vue实现了一套虚拟DOM,使我们可以不直接操作DOM元素只操作数据,就可以重新渲染页面,而隐藏在背后的原理是高效的Diff算法
2、当页面数据发生变化时,Diff算法只会比较同一层级的节点;
3、如果节点类型不同,直接干掉前面的节点,再创建并插入新的节点,不会再比较这个节点后面的子节点;
4、使用key给每个节点做一个唯一标识,Diff算法就可以正确失败此节点,"就地更新"找到正确的位置插入新的节点。

七,computed和watch的区别是什么

计算属性computed:

1、支持缓存,只有依赖数据发生改变,才会重新进行计算
2、不支持异步,当computed内有异步操作时无效,无法监听数据的变化
3、如果computed需要对数据修改,需要写get和set两个方法,当数据变化时,调用set方法。
4、computed擅长处理的场景:一个数据受多个数据影响,例如购物车计算总价

侦听属性watch:

1、不支持缓存,数据变,直接会触发相应的操作;
2、watch支持异步;监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值;
3、immediate:组件加载立即触发回调函数执行
4、deep:true 的意思就是深入监听,任何修改obj里面任何一个属性都会触发这个监听器里的 handler方法来处理逻辑
5、watch擅长处理的场景:一个数据影响多个数据,例如搜索框

八, router和route的区别

1、$router对象

1、router对象是全局路由的实例,是router构造方法的实例
2、router对象上的方法有:push()、go()、replace()

2、$route对象

1、route对象表示当前的路由信息,包含了当前 URL 解析得到的信息。包含当前的路径,参数,query对象等
2、route对象上的属性有:path、params、query、hash等等

九,虚拟dom的理解

拿到根节点对象,利用递归根据根节点对象生成对象树形数据,依据生成的树形数据生成一个虚拟DOM树,再根据虚拟DOM树渲染真实的DOM结构,当数据更新时,重新生成一个虚拟DOM树,对比两个虚拟DOM树是否有差异,将差异记录下来,再依据差异去更新我们的视图

十,sessionStorage、localStorage、cookie的区别

共同点: 都是保存在浏览器端的,且都是同源的

传输过程不同 cookie的数据始终都是在同源的http请求中携带的(即使不需要),即cookie在浏览器和服务器之间来回传递

sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。

数据存储大小不同 cookie的话一般都是不超过4k的,但是localStorage和sessionStorage则是不一样的,虽然也有存储大小的限制,但是比cookie大的多,可以达到5m甚至更大

有效范围不同 sessionStorage只有在关闭浏览器窗口之前有效,localStorage则是一只存在存放在浏览器的缓存中

作用域不同 他们的作用域也是不同的,sessionStorage在不同的浏览器页面是不能共享的,但是cookie和 localStorage不浏览器不同页面是可以共享的,同源的