在输入url后浏览器会发生什么
1,DNS域名解析:在操作系统中DNS缓存中搜索读取系统hosts文件,查找是否有对应的ip,向本地配置的首选DNS服务器发起域名解析。
2,建立TCP连接:为了准确的传输数据,TCP协议采用了三次握手策略。
3,发出http请求
4,接受响应结果:(状态码):
200:请求正常处理
204:请求处理成功但没有资源可返回
206:对资源的一部分请求
301:永久重定向
302:临时性重定向
304:缓存中读取
400:请求报文中存在语法错误
401:需要有通过http认证的认证的信息
403:访问被拒绝(需要权限)
404:无法找到请求资源
404:请求不被允许
500:服务器端在执行时发生错误
503:服务器处于超负荷或者正在进行停机维护
5,浏览器解析html:浏览器按顺序解析html文件,构建DOM树。在解析到外部的css和js文件时向服务器发起请求下载资源
6,浏览器对页面进行渲染呈现给用户
闭包 :
变量的作用域:(函数内部可以直接读取全局变量)
概念:闭包就是能够读取其他函数内部变量的函数,就是将函数内外部连接起来的桥梁
代码:
var a=9;
Function f1(){ Function f1(){
var a=9;
}
alert(n); alert(n);
}
f1(); //9 // erroer
*在函数外部自然无法读取函数内的局部变量
*在函数内部声明变量一定要用var命令,否则你实际上声明了一个全局变量
代码:Function f1(){
a=9;
}
alert(n);
// 9
*如何从外部读取局部变量:在函数内部再定义一个函数
Function f1(){
Var a=9;
Function f2(){
Alert(a); //9
}
}
*既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们就可以在f1外部读取它的内部变量。
代码:
Function f1(){
var a=9;
Function f2(){
Alert(a);
}
Return f2;
}
var result=f1();
Result(); //9
代码2:
function f1(){
var n=999;
Add=function(){n+=1}
function f2(){
alert(n);
}
Return f2;
}
var result=f1();
Result(); //999
add();
result(); //1000
解释:f2被赋给了一个全局变量,这导致它始终在内存中,而f2的存在依赖于f1,所以f1页始终在内存中,不会被垃圾回收机制回收。
使用时注意点:
闭包会使函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在ie中可能导致内存泄漏;解决方法:在退出函数之前将不使用的局部变量全部删除。
内存泄漏:不在用到的内存没有及时释放就叫内存泄漏。
get和post在Ajax中的区别:
a,get:将参数跟在url后面
Post:作为http消息的实体内容发送给服务器
b,get:请求数据会被浏览器缓存(会有安全问题)
提交的数据最多只能是1024字节
C,post用于创建资源资源的内容会被编入http请示的内容中,如:处理进货表单,在数据库中加入新数据行等
Get:请求为了查找资源,html表单数据仅用来帮助搜索。收集的数据及html表单内的输入字段名称的总长不超过1024个字符。
2,cookie,sessionstorage,localstorage的区别
共同点:都是保存在浏览器端,且同源的
区别:
a,数据始终在同源http中携带,数据在浏览器和服务器中来回传递,存储大小不能超过4k,因为每次http请求都会携带cookie,它只适合保存很小的数据,如:会话标识。而后两者不会主动把数据发给服务器,仅在本地保存,存储可达5m。
b,数据有效期不同:
Cookie:只在设置的cookie过期时间之前一直有效
Sessionstory:尽在当前浏览器窗口关闭之前有效
Localstory:始终有效,浏览器窗口关闭依然有效