一.如果把一个DIV在页面上上下左右都居中?
二、padding和margin有什么不同?
作用对象不同,padding针对于自身的,margin针对外部对象的
三、vw与百分比有什么区别?
百分比有继承关系,vw只和设备的宽度有关系。
四、行内与块级元素区别?
行内元素的宽高由内容决定,块级元素独立占一行,并且宽度有继承关系,如果没有设宽度,会默认继承父级宽度。
五、如果让google支持小字体?
六.、left 和var区别
var 的问题:
声明提升
没局部/块级作用域,
声明覆盖
七、深拷贝和浅拷贝
数组和对象的赋值是浅拷贝,会互相影响
解构赋值针对一维数组和对象可以看作是深拷贝,但是针对多维(多级)数组和对象是浅拷贝
深拷贝的方法:
1.通过json方法(只能满足常见的80%的情况,方法不能拷贝,这个原理就是先转换成json字符串,再通过parse解析成对象,function关键字会转成"function",性质发生变化)
2.手写,递归
八、在浏览器中输入URL那一瞬间发生了什么?
htts://www.baidu.com
url =>统一资源定位符,熟称网址
www 万维网/服务器
https:加密传输协议(http和TCP之前加了一层,TSL或者SSL 的安全层)
baidu.com 域名
第一次访问:
1.DNS域名解析(拿到真实的IP) (ping 是测试连接用的)
2.建立连接(TCP的三次握手:1.客户端向服务端发送请求,等待服务端确认 2.服务端收到请求,进行确认,并且回复一个指令 3.客户端收到服务器指令,并且返回确认,然后就把消息给到你 ,三次握手并不是正式的数据)
3.三次握手成功后,拿到数据,渲染页面
4.四次挥手
第二次访问:
第一次访问后,浏览器会将域名的解析存在本地,下次再访问,会先读取浏览器的缓存
html 页面放到浏览器是如何渲染的:
九、在日常开发中,从哪些点做性能优化?
1.加载优化:
减少http请求(精灵图,雪碧图,并件合并)
减少文件大小(资源压缩,图片压缩,代码压缩)
CDN(第三方库,大文件,大图)
SSR服务端渲染,预渲染
懒加载
分包(小程序等)
2.减少dom操作,避免回流,文档碎片
十、哪些是性能优化?
1.页面加载性能
2.动画与操作性能(如果有大片的DOM要进行切换,首选 translate 和定位,因为这是脱离文档流的)
3、内存占用(内存占用过大,浏览器崩掉)
4、电量消耗(游戏)
十一、懒加载原理
n 是防止加载过的图片重复加载
十二、this指向问题
1.指向上一个调用者
2.箭头函数没有作用域,没有this,所以以下代码this指向的是外层,fn5是全局的,是挂载到window下,window.fn5 所以结果是 66
如果想让结果为22,改变this的指向,使用 call,apply
bind 和 call,apply区别
1.call和apply只是传参上的区别,apply传的是数组
2.bind只改变this指向,不调用
3.apply/call 改变this指向后,执行一次
十三、闭包
为什么要有闭包?
1.避免变量被污染
2.私有化
3.保存变量,常驻内存(程序在浏览器执行的时候,会创建一个AO(Active object)临时变量对象,方法和局部对像会放到AO里,到程序执行完后,AO里的东西会变释放了,全局变量不会被垃圾回收机制回收的,会常驻于内存)
闭包的应用场景?
防抖,节流,库的封装(保证数据的私有性)
实例:
闭包应用:处理私有数据
十四、new 关键字
let person = new Person()
new 做了什么:
1. 创建一个空对象
Object.create(null) 和 {} 有什么区别:
Object.create(null) 是没有 __proto__ 原型链的,如果只是想存储一些数据,用这个效率更高
2.设置原型链
obj._proto_=Person.prototype
3.改变this的指向
4.判断返回值类型
构造函数返回的是新创建的对象,普通函数返回的是undfined