JS中的闭包

愚人码头 撰写  

闭包时是指内层的函数可以引用存在与包围他的函数内的变量,即使外层的函数的执行已经终止。功能不是一般的强大和复杂啊。
了解闭包必须首先了解变量的作用域:全局变量和局部变量(可以查看http://www.css88.com/article.asp?id=468)

闭包使代码更清晰,我们看一个离职:

 

XML/HTML代码
  1. <!DOCTYPE html PUBLIC ”-//W3C//DTD XHTML 1.0 Transitional//EN” ”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>  
  2. <html xmlns=“http://www.w3.org/1999/xhtml”>  
  3.     <head>  
  4.         <meta http-equiv=“Content-Type” content=“text/html; charset=utf-8″ />  
  5.         <title>Untitled Document</title>  
  6.     </head>  
  7.     <body>  
  8.         <div id=“main”>我的闭包测试!</div>  
  9.         <script type=“text/javascript”>  
  10. var obj=document.getElementById(“main”);   
  11. obj.style.border=“1px #cdcdcd solid”;   
  12. setTimeout(function(){   
  13.     obj.style.border=“1px #ff0000 solid”;   
  14. },4000);   
  15. function alertMsg(msg,time){   
  16.     setTimeout(function(){   
  17.         alert(msg);//这个参数msg就是引用了alertMsg(msg,time)中的参数msg   
  18.     },time);   
  19. }   
  20. alertMsg(“我是css88.com站长:愚人码头”,2000);   
  21.         </script>  
  22.     </body>  
  23. </html>  

用个闭包实现函数的Curry化,例子:
 

JavaScript代码
  1. function addNum(num){   
  2.     return function(toAdd){   
  3.         return num+toAdd;   
  4.     };   
  5. }   
  6. var addFive=addNum(5);   
  7. alert(addFive(5));  

使用匿名函数来隐藏全局作用域变量的例子:

 

JavaScript代码
  1. (function(){   
  2.     var msg=“my name is feiwen.”;   
  3.     window.onload = setTimeout(function(){   
  4.         alert(msg);   
  5.     },3000);   
  6. })();  

使用匿名函数来激发创建多个使用闭包的函数所需的作用域

 

JavaScript代码
  1. var obj=document.getElementById(“main”);   
  2. var items=["click","keypress"];   
  3. for(var i=0;i<items.length; i++){   
  4.     (function(){   
  5.         var item=items[i];   
  6.         obj["on"+item]=function(){   
  7.             alert(“what is you doing:”+item);   
  8.         }   
  9.     })();   
  10. }  

更多相关链接:


或许你对这些感兴趣:

刚刚被浏览过的文章:


发表评论

Your email is never shared. 标记为 * 的为必填项目

*
*

评论时,昵称或个人网站填的是商业网站的,一概标记为垃圾评论不予显示,并设置相关网站为过滤关键字,提交到google、百度垃圾网站数据库