前端面试总结....

    技术2024-06-14  85

    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的主线程完成了就会去任务队列取出来放到主线 程执行,然后又去取。

    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.一万条数据用列表形式渲染,不想影响浏览器帧率。

    分批次渲染,按帧数渲染 帧率:浏览器的帧率是每秒六十帧,十六点六毫秒一帧,如果每一帧的渲染超过十六点六毫秒 就会掉帧,页面卡顿。

    19.未解决的问题:登录注册的实现(token)

    Processed: 0.012, SQL: 9