一、⽔平居中的⽅法、垂直居中的⽅法
1.水平居中的方法
元素为⾏内元素,设置⽗元素 text-align:center
如果元素宽度固定,可以设置左右 margin 为 auto ;
如果元素为绝对定位,设置⽗元素 position 为 relative ,元素设 left:0;right:0;margin:auto;
使⽤ flex-box 布局,指定 justify-content 属性为center
display 设置为 tabel-ceil
2.垂直居中的方法
将显示⽅式设置为表格, display:table-cell ,同时设置 vertial-align:middle
使⽤ flex 布局,设置为 align-item:center
绝对定位中设置 bottom:0,top:0 ,并设置 margin:auto
绝对定位中固定⾼度时设置 top:50%,margin-top 值为⾼度⼀半的负值
⽂本垂直居中设置 line-height 为 height 值
二、重绘和回流(重排)是什么,如何避免?
DOM的变化影响到了元素的⼏何属性(宽⾼),浏览器重新计算元素的⼏何属性,其他元素 的⼏何属性和位置也会受到影响,浏览器需要重新构造渲染树,这个过程称为重排;浏览器将受 到影响的部分重新绘制到屏幕上的过程称为重绘。
引起重排的原因有:
添加或者删除可⻅的DOM元素,
元素位置、尺⼨、内容改变,
浏览器⻚⾯初始化,
浏览器窗⼝尺⼨改变,重排⼀定重绘,重绘不⼀定重排,
减少重绘和重排的⽅法:
不在布局信息改变时做 DOM 查询
使⽤ cssText 或者 className ⼀次性改变属性
使⽤ fragment
对于多次重排的元素,如动画,使⽤绝对定位脱离⽂档流,让他的改变不影响到其他元素
三、闭包
闭包就是能够读取其他函数内部变量的函数
闭包是指有权访问另⼀个函数作⽤域中变量的函数,创建闭包的最常⻅的⽅式就是在⼀个
函数内创建另⼀个函数,通过另⼀个函数访问这个函数的局部变量,利⽤闭包可以突破作⽤ 链域
闭包的特性:
函数内再嵌套函数
内部函数可以引⽤外层的参数和变量
参数和变量不会被垃圾回收机制回收
对闭包的理解:
使⽤闭包主要是为了设计私有的⽅法和变量。闭包的优点是可以避免全局变量的污染,缺 点是闭包会常驻内存,会增⼤内存使⽤量,使⽤不当很容易造成内存泄露。在js中,函数即 闭包,只有函数才会产⽣作⽤域的概念
闭包 的最⼤⽤处有两个,⼀个是可以读取函数内部的变量,另⼀个就是让这些变量始终保 持在内存中
闭包的另⼀个⽤处,是封装对象的私有属性和私有⽅法
好处:能够实现封装和缓存等;
坏处:就是消耗内存、不正当使⽤会造成内存溢出的问题
使⽤闭包的注意点
由于闭包会使得函数中的变量都被保存在内存中,内存消耗很⼤,所以不能滥⽤闭包,否 则会造成⽹⻚的性能问题,在IE中可能导致内存泄露
解决⽅法是,在退出函数之前,将不使⽤的局部变量全部删除
四、说说你对作⽤域链的理解
作⽤域链的作⽤是保证执⾏环境⾥有权访问的变量和函数是有序的,作⽤域链的变量只能 向上访问,变量访问到 window 对象即被终⽌,作⽤域链向下访问变量是不被允许的
简单的说,作⽤域就是变量与函数的可访问范围,即作⽤域控制着变量与函数的可⻅性和 ⽣命周期
五、JavaScript原型,原型链 ? 有什么特点?
每个对象都会在其内部初始化⼀个属性,就是 prototype (原型),当我们访问⼀个对象的 属性时如果这个对象内部不存在这个属性,那么他就会去 prototype ⾥找这个属性,这个prototype ⼜会有⾃⼰prototype ,于是就这样⼀直找下去,也就是我们平时所说的 原型链的概念
关系: instance.constructor.prototype = instance.__proto__
特点:
JavaScript 对象是通过引⽤来传递的,我们创建的每个新对象实体中并没有⼀份属于
⾃⼰的原型副本。当我们修改原型时,与之相关的对象也会继承这⼀改变当我们需要⼀个属性时, Javascript 引擎会先看当前对象中是否有这个属性, 如果没 有就会查找他的 Prototype 对象是否有这个属性,如此递推下去,⼀直检索到 Object 内建对象