一些遇到的面试题的总结。
盒模型
- 什么是盒模型:盒模型又称框模型(Box Model),包含了元素内容(content)、内边距(padding)、边框(border)、外边距(margin)几个要素。
常规盒模型 与 IE 盒模型的区别
IE模型和标准模型唯一的区别是内容计算方式的不同,如下图所示:
**IE模型元素宽度width=content+padding**,高度计算相同
标准模型元素宽度width=content,高度计算相同
css如何设置获取这两种模型的宽和高
通过css3新增的属性
box-sizing: content-box | border-box
分别设置盒模型为标准模型(content-box
)和IE模型(border-box
)。1
2
3
4
5
6
7
8.content-box {
box-sizing:content-box;
width: 100px;
height: 50px;
padding: 10px;
border: 5px solid red;
margin: 15px;
}.content-box
设置为标准模型,它的元素宽度width=100px。
1
2
3
4
5
6
7
8.border-box {
box-sizing: border-box;
width: 100px;
height: 50px;
padding: 10px;
border: 5px solid red;
margin: 15px;
}.border-box
设置为IE模型,它的元素宽度width=content + 2 padding + 2 border = 70px + 2 10px + 2 5px = 100px。
闭包
什么是闭包
一个持有外部环境变量的函数就是闭包
引用轮子哥的话
- 用途
- 封装(私有作用域)
- 匿名自执行函数
- 结果缓存
position属性
元素在页面中的布局遵守一套文档流的方式,默认的定位属性值为static
。它其实是未被设置定位的。
元素如果被定位了,那么它的top,left,bottom,right
值就会生效,能设置定位的属性是relative
,absolute
和fixed
。
需要注意的另一点是被定位的元素层次(z-index
)会得到提高。
- relative(相对定位)
设置了相对定位之后,通过修改top,left,bottom,right
值,元素会在自身文档流所在位置上被移动,其他的元素则不会调整位置来弥补它偏离后剩下的空隙。
- absolute(绝对定位)
设置了绝对定位之后,元素脱离文档流,其他的元素会调整位置来弥补它偏离后剩下的空隙。元素偏移是相对于是它最近的设置了定位属性(position
值不为static)的元素。
且如果元素为块级元素(display
属性值为block
),那么它的宽度也会由内容撑开。因为:
默认文档流中块级元素如果没有设置宽度属性,会自动填满整行。
- fixed(固定定位)
设置了固定定位之后,元素相对的偏移的参考是可视窗口,即使页面滚动,元素仍然会在固定位置。
BFC
BFC(Block formatting context)直译为”块级格式化上下文”。它是一个独立的渲染区域,只有Block-level box参与(在下面有解释), 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。
- 触发BFC的条件
- html 根元素
- float 元素: float 为none 以外的元素
- 绝对定位元素: position 为 absolute|fixed 的元素
- display 为 inline-block table-cell flex 的元素
- overflow 除了为visiable 以外的值(scroll hidden auto)
- BFC 应用及其特性
- 同一个 BFC 下外边距会发生折叠
- BFC 可以包含浮动的元素(清除浮动)
- BFC 可以防止元素被浮动元素覆盖
rem 与 em 区别
- rem: 相对的只是HTML根元素 的 font-size 大小
- em: 相对继承的父元素的 font-size 大小
JavaScript 垃圾回收
- 引用计数垃圾收集
这是最初级的垃圾收集算法。此算法把“对象是否不再需要”简化定义为“对象有没有其他对象引用到它”。如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收。
实例:
1 | var o = { |
该算法有个限制:无法处理循环引用的事例。在下面的例子中,两个对象被创建,并互相引用,形成了一个循环。它们被调用之后会离开函数作用域,所以它们已经没有用了,可以被回收了。然而,引用计数算法考虑到它们互相都有至少一次引用,所以它们不会被回收。
- 标记清除算法
重绘和重排
- 当页面只是样式发生了改变时,会发生重绘。
- 当页面布局发生了改变时,会进行重排。
Vue 和 React 的区别
- Vue是双向数据流,React是单向数据流
- Vue使用mixin创建高阶组件,React使用推荐使用HOC
跨域解决方案
常见跨域场景:不同域名,同一域名不同端口,主域相同,子域不同,同一域名,不同协议
- jsonp 利用了script可以跨域的原理
- CORS
- nginx
- node中间件
Array.prototype.flat
可指定打平层数的flat函数
1 | Array.prototype.flat = function(index = 1){ |
深拷贝
1 | function DeepCopy(obj){ |