每天背5道,务必背熟记住,希望能对找工作的小前端有点帮助
第十期了,大部分的高频面试题都收录的差不多了,今天补充几个遗漏的题目,这个系列也该和大家说再见了~~
1、重排、重绘
重排(Reflow)是什么?
- 定义:DOM中各个元素都有自己的盒子模型,需要浏览器根据样式进行计算,并根据计算结果将元素放到特定位置,这就是Reflow
- 触发Reflow的条件
- 增、删、改、移DOM
- 修改CSS样式
- Resize窗口
- 页面滚动
- 修改网页的默认字体
重绘(Repaint)是什么?
- 定义:当各种盒子的位置、大小以及其他属性改变时,浏览器需要把这些元素都按照各自的特性绘制一遍,这个过程称为Repaint。
- 触发Repaint的条件:
- DOM改动
- CSS改动
如何减少重绘、避免重排?
本质上,就是合并修改。具体的措施有:
- DOM层面:DocumentFragment本质上是一个占位符,真正插入页面的是它的所有子孙节点,所以,将需要变动的DOM节点先汇总到DocumentFragment,然后一次性插入,可以减少DOM操作的次数。
- CSS层面:操作多个样式时,可以先汇总到一个类中,然后一次性修改
2、css3动画常用的属性
- transition动画:
transition-property: 参与过渡的属性
transition-duration: 过渡的持续时间
transition-delay: 延迟过渡的时间
transition-timing-function:过渡的动画类型
复合写法:
transition: 属性值1 属性值2 属性值3 属性值4
- animation关键帧动画:
animation-name:设置对象所应用的动画名称
animation-duration:设置对象动画的持续时间
animation-timing-function:设置对象动画的过渡类型
animation-delay:设置对象动画延迟的时间
animation-iteration-count:设置对象动画的循环次数(默认情况下循环1次)
animation-direction:设置对象动画在循环中是否反向运动
animation-play-state:设置对象动画的状态
常常结合transform使用:
平移:transfrom:translate(X,Y)
旋转:transform: rotate()
斜切:ransform:skew(X,Y)
缩放:transform:scale(X,Y)
例如:
.box{
height:200px;
width: 200px;
position: relative;
margin:200px auto;
transform-style:preserve-3d;
-webkit-transform-style:preserve-3d;
transform:rotateX(20deg) rotateY(20deg);
animation:one 5s linear infinite;
-webkit-animation:one 5s linear infinite;
}
@keyframes one{
from{
transform:rotateX(-20deg) rotateY(0deg) ;
}
to{
transform:rotateX(340deg) rotateY(360deg) ;
}
}
3、事件委托
事件捕获和冒泡允许我们实现一种被称为 事件委托 的强大的事件处理模式。
这个想法是,如果我们有许多以类似方式处理的元素,那么就不必为每个元素分配一个处理程序 —— 而是将单个处理程序放在它们的共同祖先上。
在处理程序中,我们获取 event.target 以查看事件实际发生的位置并进行处理。
4、JS哪些操作会造成内存泄露
内存泄漏是指一块被分配的内存既不能使用,也不能回收,直到浏览器进程结束。
- 意外的全局变量
- 闭包
- 没有清理的dom元素 dom元素赋值给变量,又通过removeChild移除dom元素。但是dom元素的引用还在内存中
- 被遗忘的定时器或者回调
5、说几条写JavaScript的基本规范?
- 1、不要在同一行声明多个变量
- 2、使用===或!==来比较
- 3、使用字面量的方式来创建对象、数组,替代new Array这种形式
- 4、不要使用全局函数
- 5、switch语句必须要带default分支
- 6、函数不应该有的时候有return,有的时候没有return
- 7、fon-in循环中的变量,用var关键字说明作用域,防止变量污染
- 8、变量的声明遵循驼峰命名法,声明构造函数时首字母大写,定义常量的时候尽量用大写字母,用_分割
- 9、三元表达式可以替代if语句
- 10、&&和||是可以短路的,使用&&时如果前面一个值是错的,那么后面的值不用判断,使用||时,如果前面一个值是对的,那么后面的值不用判断
- 11、比较数据类型以下6种情况是false,其他都是true:false、""、0、null、NaN、undefined
- 12、数据类型检测用typeof,对象类型检测用instanceof
- 13、异步加载第三方的内容
- 14、单行注释//,多行注释/**/
- 15、使用命名空间解决变量名冲突
- 16、多人协作开发,新建一个js文件,const声明常量,在js文件中引用,用常量名替代方法名,这样做可以防止命名冲突
本着能为找工作中的前端帮一点小忙的初衷,借鉴了掘金里面很多大佬的文章,如有侵权请告知