2019前端面试题以及收集的答案(不断更新中)

1.get与post请求有什么区别?

get和post是什么?它们是http协议的两种数据请求方式。在本质上都属于tcp链接,并无差异,导致他们的差异的是

http的规定和浏览器的限制,导致他们在应用的过程中出现不同。

  1. get请求可以主动被浏览器缓,post请求无法缓存,除非是手动去设置。
  2. get请求的在浏览器回退时候是无害的的,而post会再次请求。
  3. get请求通过url传递,post直接放在请求头中。
  4. get只能支持url编码,post支持多种编码方式。
  5. get请求在浏览器中有长度限制(ie大概为2kb),post不存在。
  6. get请求说产生的url地址可以直接被浏览器加入到书签,post不可以

get和post还有个更重要的区别是:get产生一个tcp数据包,而post产生两个。

  • 对于get请求只需要一次就好了,服务器响应200(返回数据
  • 对于post请求,浏览器先发送header,服务返回100,刘浏览器再发送data,浏览器返回响应200

2. 什么是闭包?

闭包是指有权访问其他函数所定义的变量的函数。

使用闭包的话只需要将一个函数定义在另一个函数的内部,并将它给暴露出来,比如可以直接返回或者给他传递给其他函数,由于内部函数对外部函数变量还存在着应用,所以在外部函数执行完毕后不会主动将该内存销毁。

闭包最重要的用途是实现对象的私有数据。 对象的内部数据无法被轻易的修改,保证了程序的安全性。

但同时大量的使用闭包会导致内存泄漏。

3. 什么是事件代理(事件委托)?有什么好处?

js高级程序上的定义:利用事件冒泡,只绑定一个函数就可以处理一类事件。

在js中,添加到页面上的事件数量直接关乎着页面的性能,多次与dom发生交互访问dom会导致页面重绘和重排,导致拖慢整个页面,这就是为什么优化里中的减少dom操作的原因。而且,每个函数都是一个对象,对象就要占据内存,内存大了性能自然就慢了。

事件委托的实现原理就是利用事件冒泡。

冒泡的顺序 :

  1. 目标元素
  2. dom结构知道body
  3. body
  4. html
  5. document
  6. windon

事件代理的好处:

  1. 优化性能
  2. 当新元素绑添加进来的时候不需要再次绑定事件,通过冒泡就可以触发。

4. 浏览器输入url到页面呈现出来发生了什么?

  1. 进行地址解析
    1. 解析出字符串地址中的主机,域名,端口号,参数等
  2. 根据解析出的域名进行DNS解析
    1. 首先在浏览器中查找DNS缓存中是否有对应的ip地址,如果有就直接使用,没有机执行第二步
    2. 在操作系统中查找DNS缓存是否有对应的ip地址,如果有就直接使用,没有就执行第三步
    3. 向本地DNS服务商发送请求查找时候有DNS对应的ip地址。如果仍然没有最后向Root Server服务商查询。

  3. 根据查询到的ip地址寻找目标服务器

    1. 与服务器建立连接

    2. 进入服务器,寻找对应的请求

  4. 浏览器接收到响应码开始处理。

  5. 浏览器开始渲染dom,下载css、图片等一些资源。直到这次请求完成

5. JS原型,原型链相关知识点。

在js中,每创建出来一个函数js就会默认创建一个prototype的属性,这个属性指向函数的原型对象。

在原型对象里面有一个属性constructor属性指向了构造函数。

每个对象都有一个隐式原型 __proto__ ,指向的是构造该对象的构造函数的原型对象。

原型对象也是对象,所以如果我们让原型对象指向另外的一个实例,这个实例也有自己的原型对象,如果这个实例的原型对象又等于了另外的实例,一层层下去就形成了一个链条。这就是所谓的原型链。

函数也是对象,所以函数也有隐式原型,函数的隐式原型为Function.prototype

Function.prototype的隐式原型为Object.prototype 

Object.prototype 的隐式原型为null 这里也就是原型链的顶端

2019前端面试题以及收集的答案(不断更新中)_第1张图片

 

你可能感兴趣的:(前端基础)