2020.7.3 JS面试总结…
1、let和var的区别:
1.块级作用域。 2、不存在变量提升 3、不能有重复的声明 。
2.闭包:
闭包是一个函数有权访问另一个函数的作用域。
闭包的特点:
函数嵌套函数
内部的函数可以引用外部函数的参数或者变量
参数和变量不会被垃圾回收机制回收,因为内部函数还在引用
闭包的好处:
模块化代码(通过立即执行函数构建具有私有变量和私有函数的对象)
for循环中的索引
闭包的坏处:
内存泄露(比如DOM节点的事件引用的函数和函数里使用到DOM节点后的互相引用,引起内存泄露。)
解决方法:用不到时将对象或方法设为null
3.怎么判断数据类型?
通吃:Object.prototype.toString.call(55) "[object,number]"
基本类型:typeof (null会被判定为object)
原型链上的判断:instanceof
数组:Array. isArray()
4.原型链:
每个对象都可以有一个原型_proto_,这个原型还可以有它自己的原型,以此类推,形成一个原型链。
5.如何实现继承
类的声明与继承链接
1,原型链继承
2,借助构造函数继承
3,组合式继承
4,寄生式继承
5,寄生组合式继承(组合继承+寄生继承)
6.原生ajax
var xhr = new XMLHttpRequest()
// 设置请求方式,url,是否异步,true代表异步
xhr.open('GET',url,true
// onreadystatechange回调函数,readystate改变时会调用这个函数
xhr.onreadystatechange = function (){
if(xhr.readystate ===4){
if(xhr.status === 200){
resolve(xhr.responseText)
}else if(xhr.status === 404){
// reject错误回调处理
reject(new Error('404 NOT FOUND'))
}
}
}
// 发送ajax请求
xhr.send(null)
//当发送get请求时,send方法参数为null,只有当发送post请求时,send方法才有对应string参数
7.事件循环机制
有很多个线程,比如说http请求线程,定时器线程之类,发送http请求会创建http的线程,将这个线程发
送到后台,获取到数据后将回调函数放进任务队列,js的主线程完成了就会去任务队列取出来放到主线
程执行,然后又去取。
8.本地存储
cookie : cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来
回传递。cookie数据不能超过4k。只在设置的cookie过期时间之前一直有效。所有同源窗口中都是共享
sessionStorage:不会自动把数据发给服务器。当前浏览器窗口关闭前有效。存储可以达到5M或更大。
localStorage:不会自动把数据发给服务器。永久有效。存储可以达到5M或更大。
同源:JS只能与同一个域中的页面进行通讯
当协议、域名、端口号都相等时,是同源的。三者有一样不同都会形成跨域。
9.跨域:
JSONP:利用scritp标签请求外部服务器中的数据,从而绕开同源策略对AJAX请求数据的限制。
iframe实现跨域:
后台代理方式:后台作为代理,每次对其它域的请求转交给本域的后台,本域的后台通过模拟http请求
去访问其它域,再将返回的结果返回给前台
10.性能优化
见我另一篇博客 性能优化
11.浏览器渲染机制
见我另一篇博客 渲染机制
12.重绘次数过多造成页面卡顿怎么解决?
把那个元素设置成absolute,让它脱离文档流
13.写动画的方法
svg canvas transtion settimeout 面试官推荐 requestAnimationFrame 帧率函数
14.异步操作都有哪些?
1、定时器都是异步操作
2、事件绑定也是异步操作
3、AJAX中一般采取异步操作
4、回调函数可以理解为异步
15.http请求
我的一篇博客有提到:http详解
16.输入url后经历了什么
一、浏览器查找输入域名的IP地址
1、查找浏览器缓存(浏览器一般会缓存DNS记录一段时间,一般为2-30分钟)。
2、查找系统缓存(即hosts文件,有没有对应的IP)
3、以上都没有的话,就会经过DNS域名服务器进行域名解析
二、建立TCP连接(三次握手)
三、发送Http请求
四、服务器处理请求
五、返回响应结果
六、关闭TCP连接
七、浏览器解析html
八、浏览器布局渲染
17.flex布局
18.一万条数据用列表形式渲染,不想影响浏览器帧率。
分批次渲染,按帧数渲染
帧率:浏览器的帧率是每秒六十帧,十六点六毫秒一帧,如果每一帧的渲染超过十六点六毫秒
就会掉帧,页面卡顿。