http://www.css88.com/archives/481
闭包时是指内层的函数可以引用存在与包围他的函数内的变量,即使外层的函数的执行已经终止。功能不是一般的强大和复杂啊。
了解闭包必须首先了解变量的作用域:全局变量和局部变量(可以查看http://www.css88.com/article.asp?id=468)
闭包使代码更清晰,我们看一个离职:
XML/HTML代码
- <!DOCTYPE html PUBLIC ”-//W3C//DTD XHTML 1.0 Transitional//EN” ”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
- <html xmlns=“http://www.w3.org/1999/xhtml”>
- <head>
- <meta http-equiv=“Content-Type” content=“text/html; charset=utf-8″ />
- <title>Untitled Document</title>
- </head>
- <body>
- <div id=“main”>我的闭包测试!</div>
- <script type=“text/javascript”>
- var obj=document.getElementById(“main”);
- obj.style.border=“1px #cdcdcd solid”;
- setTimeout(function(){
- obj.style.border=“1px #ff0000 solid”;
- },4000);
- function alertMsg(msg,time){
- setTimeout(function(){
- alert(msg);//这个参数msg就是引用了alertMsg(msg,time)中的参数msg
- },time);
- }
- alertMsg(“我是css88.com站长:愚人码头”,2000);
- </script>
- </body>
- </html>
用个闭包实现函数的Curry化,例子:
JavaScript代码
- function addNum(num){
- return function(toAdd){
- return num+toAdd;
- };
- }
- var addFive=addNum(5);
- alert(addFive(5));
使用匿名函数来隐藏全局作用域变量的例子:
JavaScript代码
- (function(){
- var msg=“my name is feiwen.”;
- window.onload = setTimeout(function(){
- alert(msg);
- },3000);
- })();
使用匿名函数来激发创建多个使用闭包的函数所需的作用域
JavaScript代码
- var obj=document.getElementById(“main”);
- var items=["click","keypress"];
- for(var i=0;i<items.length; i++){
- (function(){
- var item=items[i];
- obj["on"+item]=function(){
- alert(“what is you doing:”+item);
- }
- })();
- }

