【无标题】

本文介绍了HTTP cookie的工作原理,包括服务器设置、浏览器存储和请求时的发送。此外,详细讲解了JavaScript中设置和获取cookie的方法,以及如何利用闭包来保留变量状态。闭包的概念、特点和作用被深入剖析,强调了其在内存管理和防止全局变量污染中的作用。同时,也提到了闭包可能带来的内存消耗问题和使用注意事项。
摘要由CSDN通过智能技术生成

Cookie的处理分为:
服务器像客户端发送cookie;
浏览器将cookie保存;
之后每次http请求浏览器都会将cookie发送给服务器端;
document.cookie=“name=value;expires=日期;path=路径;domain=域名;”
name:一个唯一确定的cookie名称。name=value必选项;其他都是可选项。

max-age: 与expires作用相同,用来告诉浏览器此cookie多久过期(单位是秒),而不是一个固定的时间点。正常情况下,max-age的优先级高于expires。

//设置cookie方式
function setCookie(cname,cvalue,exdays,path){
var cookieText=cname+=+cvalue;
if(exdays>0){
var mydate=new Date();
mydate.setTime(mydate.getTime()+exdays2460601000);

    cookieText+=";expires="+mydate.toUTCString();
}
   *document.cookie=cookieText;*

}
console.log(document.cookie);
setCookie(“stuName”,sdx);
setCookie(“stuName2”,fj,1);
setCookie(“stuName3”,sss);
setCookie(“stuId”,110);

//获取
var str=stuName=sdx; stuName2=fj; stuName3=sss;stuId=123

// //查找“stuname3=” 在整个字符串中第一次出现的位置str.indexOf()
var i=str.indexOf(“stuName3=”);
console.log(i);
var start=i+“stuName3=”.length; //开始截取的位置上
console.log(start);

var end=str.indexOf(“;”,i); //截取到分号位置之前
// console.log(“end”,end);
console.log(str.substring(start,end));

截取
// 1.字符串分割成数组
// var arr=str.split(“;”);
// console.log(arr);
// 2.遍历数组 去除空格 查找name=第一次出现的位置;
// 3.找到开始截取的位置 与 结束截取的位置 截取

var str=
stuName=sdx; stuName2=fj; stuName3=sss; stuId=110;

// 开始封装方法
function getCookie(cname){
var cookieText=document.cookie;
var arr=cookieText.split(“;”);

for(var i=0;i<arr.length;i++){
var item=arr[i].trim();
if(item.indexOf(cname+“=”)===0){
var start=cname.length+1;
var end=item.length;
return item.substring(start.end);
}
}
return “”;
}
console.log(getCookie(“stuName”));
console.log(getCookie(“stuId”));

// 删除
function removeCookie(cname){
document.cookie=cname+“=;expires=”+new Date(0);
var con=confirm(“sure”);
if(con){
removeCookie(stuId);
}
}
// removeCookie(stuId);

//
作用域链–>就是函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,它内部的规则是把一个函数自身的本地变量放在最前面,把自身的父级函数中的变量放在其次,把在高一级函数中的变量放在更后面,以此类推直至全局对象为止,当函数中需要查询一个变量的值的时候,js解释器会去作用域链查找,从最前面的本地变量中先查找,如果没有找到对应的变量,则到下一级的链上找,一旦找到了变量,则不在继续寻找,如果找到最后也没有找到需要的变量,则解释器返回undefined。

闭包closure -->就是一个环境能够读取其他函数内部变量(有权访问另一个函数作用域中的变量的函数。是将函数内部和函数外部连接起来的桥梁。)
1.必包一定是一个函数。
2.闭包函数内能保持对上层作用域变量的引用。
3.函数被自身作用域之外的域访问时才产生必包
4.必包是自身函数与上层作用域共同构成。
5.必包与词法作用域。作用域链,垃圾回收机制息息相关。

产生一个必包最常见的方式就是在一个函数内部创建另一个函数。
function func(){
var a=10.b=1;
function closure(){
return a+b;
}
return closure;
}
闭包的作用域链包含着它自己的作用域,以及包含它的函数的作用域和全局作用域。

函数的作用域及其所有变量都会在函数执行结束后被销毁。但是,在创建了一个闭包以后,这个函数的作用域就会一直保存到闭包不存在为止.

闭包的缺点就是常驻内存会增大内存使用量,并且使用不当很容易造成内存泄露。
如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。
优点: 变量长期驻扎在内存中
避免全局变量的污染。
私有成员的存在.

// 闭包引用外部函数变量对象中的值;
// 在外部函数的外部调用闭包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值