码迷,mamicode.com
首页 > 其他好文 > 详细

匿名函数与闭包

时间:2016-11-10 19:00:29      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:cti   ret   for   var   取值   语句   char   无法   tle   

<!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>

 

匿名函数与闭包

标签:cti   ret   for   var   取值   语句   char   无法   tle   

原文地址:http://www.cnblogs.com/annie211/p/6051807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!