1.js闭包的基本概念
//总结:如果想要缓存数据,就把这个数据放在外层的函数和里层的函数的中间位置
//闭包的作用:缓存数据.优点也是缺陷,没有及时的释放
//局部变量是在函数中,函数使用结束后,局部变量就会被自动的释放
//闭包后,里面的局部变量的使用作用域链就会被延长
/*
* 闭包的概念:函数A中,有一个函数B,函数B中可以访问函数A中定义的变量或者是数据,此时形成了闭包(这句话暂时不严谨)
* 闭包的模式:函数模式的闭包,对象模式的闭包
* 闭包的作用:缓存数据,延长作用域链
* 闭包的优点和缺点:缓存数据
*
* 闭包的应用
*
*
* */
//函数的闭包
2.js闭包的小案例
function f1(){
var num=10;
function f2(){
console.log(num);
}
f2();
}
f1();
//对象的闭包
function f3(){
var num=20;
var obj={
age:num
};
console.log(obj.age);
}
f3();
//函数的闭包
function f2(){
var num=10;
return function(){
num++;
return num;
}
}
//
var ff=f2();
console.log(ff());//11
console.log(ff());//12
console.log(ff());//13
3.生成一个重复的随机数
function showRandom(){
var num=parseInt(Math.random()*10+1);
return function(){
console.log(num);
}
}
var ff=showRandom();
ff();
ff();
ff();
4.点赞案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>对自己狠点</title>
<style>
ul {
list-style-type: none;
}
li {
float: left;
margin-left: 10px;
}
img {
200px;
height: 180px;
}
input {
margin-left: 30%;
}
</style>
<script>
//$永远都是24k纯帅的十八岁的杨哥$
</script>
</head>
<body>
<ul>
<li><img alt=""><br/><input type="button" value="赞(1)"></li>
<li><img alt=""><br/><input type="button" value="赞(1)"></li>
<li><img alt=""><br/><input type="button" value="赞(1)"></li>
<li><img alt=""><br/><input type="button" value="赞(1)"></li>
</ul>
<script>
//点赞案例
function my$(tagName){
return document.getElementsByTagName(tagName);
}
//闭包缓存
function getValue(){
var value=1;
return function(){
this.value="赞("+(++value)+")";
//this.value="赞("+value+")";
}
}
//获取所有的按钮
var btnObj=my$("input");
for(var i=0;i<btnObj.length;i++){
btnObj[i].onclick=getValue();
}
</script>
</body>
</html>