1.闭包是什么?缺点是什么?
函数内部使用外部变量,只要函数不被销毁,变量就一直占据内存
缺点:过多的闭包会占用过多内存,导致内存泄漏,IE最明显
2.前端性能优化
(1)统一使用封装的组件保证样式统一
(2)减少dom操作,能用dom片段的操作dom片段,减少重绘和回流,操作dom使用vue提供的ref 指令等,避免使用原生js 当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。 当Render Tree中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。
(3)路由图片等使用懒加载,按需加载组件和路由
(4)反复使用的计算属性,定义成一个变量
(5)频繁切换使用v-show,不频繁使用v-if
(6)合理使用vue提供的缓存功能,比如keep-alive computed等 watch为监听元素变化, computed 会从缓存中获取,有缓存 watch没有缓存, 能用computed不用methods和watch
(7)图标使用优先级iconfont>webp>jpg>png
3.从输入url到展示页面经历哪些过程
(1)输入url按下回车
(2)浏览器查找域名的ip地址
(3)建立TCP链接(三次握手)
(4)浏览器向服务器发起http请求
(5)服务器处理请求
(6)关闭TCP链接
(7)浏览器解析资源
4.深拷贝
方法一
var obj =JSON.parse(JSON.stringify(object))
方法二
function deepCopy(obj){
if(obj typeof !=='object'){
return obj
}else{
let res = Array.isArray(obj)?[]:{}
for(var k in obj){
if(obj.hasOwnProperty[key]){
if(typeof obj[k] === 'object'){
res[key] = deepCopy(obj[key])
}else{
res[key] = obj[k]}
}
}
return res
}