闭包_cookie
匿名函数
匿名函数:
没有名字的函数
立即执行的函数
// 1. 匿名函数
// 最外侧的括号,是函数的执行符号,代表调用,也可以应用于传参
(function(){console.log("我的名字叫卡卡西");})();//无参数
(function(value){console.log(value);})("我的名字叫卡卡西");//有参数
// 有时候也叫拉姆达函数(入);
// 写好以后不需要调用,可以立刻自己执行,也叫自执行函数;
// 由于外部无法引用内部的变量,执行完以后很快就会内存被释放,这种东西不会污染全局对象;
// 自执行函数,也就是定义和调用合为一体;
闭包
// 闭包:
// 概念:闭包是指有权访问另一个函数作用域种的变量的函数
// 类型:闭包是函数
// 作用:访问另一个函数作用域种的变量
// 创建闭包的常见方式就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量
function content(){
var value="我的名字叫卡卡西";
}
console.log(value); //无法调用
function content(){
var value="我的名字叫卡卡西"
return value;
}
console.log(content()); //可以调用
闭包
function content(){
var value="我的名字叫卡卡西";
// 闭包是什么?如下所示,闭包就是一个函数;
return function(){
return value;
}
}
console.log(content()()); //可以访问 闭包的作用是什么?通过闭包可以访问私有变量
console.log(value); //无法访问 内部变量/私有变量
// 会把变量驻留在内存里
// 局部变量的生命周期,从声明开始,到所在函数体调用以后被删除
累加 0,1,2,3,4……
//全局变量生命周期,从声明开始,一直到页面关闭以后删除
var x=0;
function add(){
x++;
console.log(x);
}
setInterval(add,1024);
// 局部变量生命周期,从声明开始,一直到所在函数体运行以后被删除
//使用局部变量
function add(){
var x = 0;
x++;
console.log(x); //一直是1
}
setInterval(add,1024);
使用闭包 累加 0,1,2,3,4……
function add(){
var x = 0;
return function(){
x++;
return x;
}
}
console.log(add()()); //1
console.log(add()()); //1
var last_add=add(); //把每次add()的值存储
console.log(last_add()); //1
console.log(last_add()); //2
console.log(last_add()); //3
last_add=null; //not a function
console.log(last_add()); //无
闭包
// 小的总结
// 闭包概念:在函数外部访问其内部局部私有变量的函数叫做闭包
// 原理:通过匿名函数讲局部变量驻留在我的内存当中,达到全局变量效果
// 优缺点
// 减少了全局变量的使用频率,防止污染
// 由于闭包作用域返回的局部变量不会及时被销毁释放,所以可能会占用更多内存,过多的情况下会导致内存泄漏
闭包应用
获取下标普通写法
<script>
var div=document.getElementsByTagName("div");
for(var i=0;i<div.length;i++){
div[i].index=i;
div[i].onclick=function(){
alert(this.index);
}
}
</script>
闭包写法
var div = document.getElementsByTagName("div");
for(var i=0;i<div.length;i++){
div[i].onclick = (function(index){
return function(){
alert(index);
}
})(i)
}
// 需要加自执行函数,加两个()
// 第一个()包括要调用的函数体
// 第二个()进行自调用
cookie
// 原理:本地客户端存储相关数据
// 网景
// 通过http协议生成的
// 登录注册, 购物车添加
// cookie组成
// 名/值组成 name = value
// name = value;[expires=date];
// name=value是必须的 []里面是可选的
// []里面的东西代表的是日期,数据存储周期
// 会话代表的是页面关闭以后就没了
alert(document.cookie);
// cookie写入
document.cookie="user=卡卡西";
alert(document.cookie);
// 编码写入
// 编码和解码
// 编码:encodeURIComponent()
// 解码:decodeURIComponent()
document.cookie = "user="+encodeURIComponent("我的名字叫卡卡西");
alert(document.cookie);
alert(decodeURIComponent(document.cookie));
// setDate()
// 设置月份当中的某一天
var date = new Date();
date.setDate(date.getDate()+1); //一天以后
document.cookie = "user="+encodeURIComponent("卡卡西")+";expires="+date;
alert(decodeURIComponent(document.cookie));
// 删除cookie
var date = new Date();
date.setDate(date.getDate()-1);
document.cookie = "user="+encodeURIComponent("卡卡西")+";expires="+date;
alert(decodeURIComponent(document.cookie));
document.cookie = "user="+encodeURIComponent("卡卡西")+";expires="+new Date(0);//清除