匿名函数与闭包
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>闭包.html</title>
<style>
</style>
<script src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
//闭包:函数里的匿名函数
//普通函数
/*function add(){
return 123;
}
alert(add());
//把匿名函数赋值给变量,因为它是一条语句,所以要加分号
var box=function(){
return "lee";
};
alert(box);
//通过自我执行来执行匿名函数
(function(a){
alert(a);
})("a");
//使用全局变量进行累加
var age=100; //全局变量驻留在内存中,所以可以进行累加
function box(){
age++;
}
alert(age); 100
box();
alert(age); 101
box();
alert(age); 102
function box(){
var age=100; //使用局部变量无法进行累加,因为每执行一次,局部变量就被销毁,再执行的时候就会初始化
age++;
return age;
}
alert(box()); 101
alert(box()); 101
alert(box()); 101
//使用匿名函数,实现局部变量驻留在内存中,从而实现累加
function box(){
var age=100;
var le=function(){
age++
return age;
}
return le;
}
var b=box(); //box只执行一次
alert(b()); //后面调用的都是匿名函数
alert(b());
alert(b());
b=null;//解除引用,等待垃圾回收
//循环里的匿名函数的取值
function box(){
var arr=[];
for(var i=0;i<5;i++){
arr[i]=function(){
return i;
}
}
return arr;
}
var b=box(); //循环已经完毕了,i最终是4++=5;所以最终就是5
for(var i=0;i<5;i++){
alert(b[i]());
}
alert(b);
function box(){
var arr=[];
for(var i=0;i<5;i++){
arr[i]=function(a){
return a;
}(i) //通过自我及时执行匿名函数
}
return arr;
}
var b=box();
for(var i=0;i<5;i++){
alert(b[i]); ---0 1 2 3 4
}*/
function box(){
var arr=[];
for(var i=0;i<5;i++){
arr[i]=function(a){
return a;
}(i)
}
return arr;
}
var b=box();
for(var i=0;i<5;i++){
alert(b[i]); ---0 1 2 3 4
}
//闭包是运行在全局中,所以闭包里的this也是指向全局。
</script>
</head>
<body>
</body>
</html>