1、什么是DOM?
DOM(Document Object Model(文档对象模型)),是网页用来表示文档中对象的标准模型,是针对HTML和XML的API。
2、浏览器渲染过程?
构建DOM树 --> 构建cssom树 --> 将DOM和cssom合并成一个渲染树 --> 布局 --> 绘制。
3、什么是重绘?
修改DOM元素的样式,但是不会影响元素的大小尺寸变化,直接可以重新绘制元素样式。
4、什么是重排?
修改DOM或修改DOM元素的尺寸大小,会发生重排。
5、怎样减少重排?
尽量少操作DOM、避免使用table布局、尽量使用className、可以使元素脱离文档流,减少渲染树的规模。
6、什么情况会发生重排?
添加或删除DOM、DOM元素的位置发生变化、DOM元素的尺寸发生变化、浏览器尺寸发生变化。
7、什么是虚拟DOM?
虚拟DOM就是将真实的节点DOM用js模拟出来。
通过状态生成一个虚拟节点树,然后使用虚拟节点树进行渲染。渲染之前,先缓存新的虚拟节点树,然后使用新的虚拟节点树和旧的虚拟节点树进行对比,只渲染不同的部分。
8、为什么要使用虚拟DOM?
(1)一个DOM节点是很庞大的,它有很多的属性,每次操作DOM都是一个相当耗时的过程。
(2)当修改一个DOM节点时,很有可能会发生重排,会导致浏览器渲染部分文档或整个文档。
(3)到对多个DOM节点进行操作时,会多次获取DOM节点的坐标位置,会造成性能的浪费。
而虚拟DOM就可以很好解决上述问题,一次操作多个DOM节点时,可以通过虚拟DOM找到最小的变化,再把这些改动写入实际的虚拟DOM,通过虚拟DOM减少了对DOM的操作,有利于性能的提升。
9、什么是diff算法?
Vue通过编译将模板转换为AST(抽象语法树),之后再将AST转换为渲染函数,执行渲染函数可以得到一个虚拟节点树(vnode),再拿新的虚拟节点树(vnode)对比旧的虚拟节点树(oldVnode),
找出更新部分的节点,最后再做渲染。
10、vue2中的diff算法是怎么实现的?
vnode和oldVnode对比的过程,也就是常说的diff算法。
11、js的数据类型
(1)普通类型:number、string、Boolean、
(2)引用类型:Array、Object
12、堆和栈的区别
栈:一般存储普通类型、读取写入速度快、存储内容少、变量不使用会被清理。
堆:一般存储引用类型、读取写入速度慢、存储内容多、一般对象会存储在堆中。
13、==与===的区别
==只判断值是否相同
===需要值和类型全部相同才为真
==先会判断两端类型是否相同,如果不同会进行隐式转换,如果一致则直接判断两个值是否相同。
14、浅拷贝和深拷贝
浅拷贝:只拷贝数值,不拷贝地址,如果改变原来对象的值,浅拷贝的值也会跟着变化。
深拷贝:地址和值都进行拷贝,拷贝的方法有JSON.parse(JSON.stringify())或for...in加递归。
15、__proto__和prototype和constructor
__proto__和constructor属性是对象所独有的。
prototype属性是函数所独有的,js中函数也是一种对象,所有函数也就所有__proto__和constructor属性。
16、var和let和const区别
var会提示变量
let和const不会进行变量提升
const初始定义不能再进行更改
17、闭包
将一个函数内部的值return出去,让函数外部也可以访问。
缺点:闭包会导致内存泄漏。
18、原型链
一个普通实例对象能够访问构造它的抽象类型原型上的方法和属性,这个抽象类型也是一个普通实例对象,它也可以访问构造它的抽象类型上的原型的方法和属性,这样一直找下去,就称为原型链。