1.get与post请求有什么区别?
get和post是什么?它们是http协议的两种数据请求方式。在本质上都属于tcp链接,并无差异,导致他们的差异的是
http的规定和浏览器的限制,导致他们在应用的过程中出现不同。
* get请求可以主动被浏览器缓,post请求无法缓存,除非是手动去设置。
* get请求的在浏览器回退时候是无害的的,而post会再次请求。
* get请求通过url传递,post直接放在请求头中。
* get只能支持url编码,post支持多种编码方式。
* get请求在浏览器中有长度限制(ie大概为2kb),post不存在。
* get请求说产生的url地址可以直接被浏览器加入到书签,post不可以
get和post还有个更重要的区别是:get产生一个tcp数据包,而post产生两个。
* 对于get请求只需要一次就好了,服务器响应200(返回数据
* 对于post请求,浏览器先发送header,服务返回100,刘浏览器再发送data,浏览器返回响应200
2. 什么是闭包?
闭包是指有权访问其他函数所定义的变量的函数。
使用闭包的话只需要将一个函数定义在另一个函数的内部,并将它给暴露出来,比如可以直接返回或者给他传递给其他函数,由于内部函数对外部函数变量还存在着应用,所以在外部函数执行完毕后不会主动将该内存销毁。
闭包最重要的用途是实现对象的私有数据。 对象的内部数据无法被轻易的修改,保证了程序的安全性。
但同时大量的使用闭包会导致内存泄漏。
3. 什么是事件代理(事件委托)?有什么好处?
js高级程序上的定义:利用事件冒泡,只绑定一个函数就可以处理一类事件。
在js中,添加到页面上的事件数量直接关乎着页面的性能,多次与dom发生交互访问dom会导致页面重绘和重排,导致拖慢整个页面,这就是为什么优化里中的减少dom操作的原因。而且,每个函数都是一个对象,对象就要占据内存,内存大了性能自然就慢了。
事件委托的实现原理就是利用事件冒泡。
冒泡的顺序 :
* 目标元素
* dom结构知道body
* body
* html
* document
* windon
事件代理的好处:
* 优化性能
*
当新元素绑添加进来的时候不需要再次绑定事件,通过冒泡就可以触发。
4. 浏览器输入url到页面呈现出来发生了什么?
* 进行地址解析
* 解析出字符串地址中的主机,域名,端口号,参数等
* 根据解析出的域名进行DNS解析
* 首先在浏览器中查找DNS缓存中是否有对应的ip地址,如果有就直接使用,没有机执行第二步
* 在操作系统中查找DNS缓存是否有对应的ip地址,如果有就直接使用,没有就执行第三步
*
向本地DNS服务商发送请求查找时候有DNS对应的ip地址。如果仍然没有最后向Root Server服务商查询。
*
根据查询到的ip地址寻找目标服务器
*
与服务器建立连接
*
进入服务器,寻找对应的请求
*
浏览器接收到响应码开始处理。
*
浏览器开始渲染dom,下载css、图片等一些资源。直到这次请求完成
5. JS原型,原型链相关知识点。
在js中,每创建出来一个函数js就会默认创建一个prototype的属性,这个属性指向函数的原型对象。
在原型对象里面有一个属性constructor属性指向了构造函数。
每个对象都有一个隐式原型 __proto__ ,指向的是构造该对象的构造函数的原型对象。
原型对象也是对象,所以如果我们让原型对象指向另外的一个实例,这个实例也有自己的原型对象,如果这个实例的原型对象又等于了另外的实例,一层层下去就形成了一个链条。这就是所谓的原型链。
函数也是对象,所以函数也有隐式原型,函数的隐式原型为Function.prototype
Function.prototype的隐式原型为Object.prototype
Object.prototype 的隐式原型为null 这里也就是原型链的顶端
热门工具 换一换