匿名函数和闭包
Posted -小白白白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名函数和闭包相关的知识,希望对你有一定的参考价值。
1 //普通函数 2 function Box(){ 3 return "Lee"; 4 } 5 //匿名函数 6 function () { //单独的匿名函数是无法运行的,也无法调用 7 return"Lee"; 8 } 9 10 //把匿名函数赋值给变量 11 var box = function(){ 12 return "Lee"; 13 }; 14 alert(box()) 15 16 //通过自我执行来执行匿名函数 17 (function(){ //(匿名函数)() 第一个括号放匿名函数 第二个括号执行 18 alert("Lee"); 19 })(); 20 21 //把匿名函数自我执行的返回值赋给变量 22 var box = (function(){ 23 return "Lee"; 24 })(); 25 alert(box); 26 27 //自我执行匿名函数的传参 28 (function(){ 29 alert(age); 30 })(100); 31 32 //函数里放一个匿名函数 33 function box(){ 34 return function(){ //闭包 35 return "Lee" 36 } 37 } 38 alert(box()())
闭包
1 //通过闭包返回局部变量 2 function box(){ 3 var age = 100; 4 return function(){ 5 return age; 6 } 7 } 8 alert(box()()) 9 10 //使用全局变量进行累加 11 var age =100; 12 functon box(){ 13 age++; 14 } 15 alert(age); 16 box(); 17 alert(age) 18 19 //使用局部变量累加 20 functon box(){ 21 var age = 100 22 age++; 23 return age 24 } 25 alert(box()); //多少次都是101 26 27 //使用匿名函数实现局部变量驻留内存中从而累加 28 function box(){ 29 var age =100; 30 return function(){ 31 age++; 32 return age; 33 } 34 } 35 var b = box(); 36 alert(b()); 37 alert(b()); //实现累加 38 b = null; //解除引用 无法再执行
循环里的匿名函数
1 functon box(){ 2 var arr = []; 3 for(var i=0;i<5;i++){ 4 arr[i]=function(){ 5 return i; 6 } 7 } 8 //循环已经执行完毕 最终是5 9 return arr; 10 } 11 var b=box() 12 for(var i = 0;i<5;i++){ 13 alert(b[i]()) 14 } 15 16 //改 17 functon box(){ 18 var arr = []; 19 for(var i=0;i<5;i++){ 20 arr[i]=(function(num){ //通过自我执行匿名函数 21 return num 22 })(i); 23 } 24 return arr; 25 } 26 var b=box() 27 for(var i = 0;i<5;i++){ 28 alert(b[i]()) 29 } 30 31 //改2 32 functon box(){ 33 var arr = []; 34 for(var i=0;i<5;i++){ 35 arr[i]=function(num){ 36 return function(){ //闭包可以将变量驻留在内存中 37 return num; 38 } 39 }(i); 40 } 41 42 return arr; 43 } 44 var b=box() 45 for(var i = 0;i<5;i++){ 46 alert(b[i]()) 47 }
this对象
闭包里的this指向window
1 var user = "The Window" 2 var box={ 3 user:"The Box", 4 getUser:functon(){ 5 //这里作用域的this是box 6 var that = this; 7 return function(){ 8 //这里作用域this是window 9 return that.user 10 } 11 } 12 } 13 14 alert(box.getUser()()); //the window 15 16 //对象冒充 17 1.alert(box.getUser().call(box)); //the box 18 2.alert(box.getUser()());
以上是关于匿名函数和闭包的主要内容,如果未能解决你的问题,请参考以下文章