标签:
先看一个闭包经典的例子:
<!-- 实现一段脚本,使得点击对应链接alert出相应的编号 --> <body> <a href=‘#‘> 第一个链接 </a> </br> <a href=‘#‘> 第二个链接 </a> </br> <a href=‘#‘> 第三个链接 </a> </br> <a href=‘#‘> 第四个链接 </a> </br> <script type="text/javascript"> var lis = document.links; for(var i = 0, length = lis.length; i < length; i++) { (function(i) { lis[i].onclick = function() { alert(i + 1); }; })(i); } </script> </body>
闭包就是一个组合,这个组合包括:一个function(或多个)和一些变量(或一个)。这些变量本该死掉的,却被保存在了fucntion的scope链里。
上面的例子中,lis[i].onclick = function() alert(i + 1); }; 就是function,i就是变量。
为了隔离和安全。
上面的例子中构建了四个闭包:
var lis = document.links; for(var i = 0, length = lis.length; i < length; i++) { lis[i].onclick = function() { alert(i + 1); }; }
变量i不会被杀死,也不会保存在function的scope链上,四个function访问的都是外面的那个i,弹出的数值将会一样,都是5,因为i最后是4。
1,将function和变量,用另外一个function包住,并使用()执行这个最外面的function:
(function(i) { lis[i].onclick = function() { alert(i + 1); }; })(i);
2,function执行后,里面的局部变量被杀死了,但是却被保存在function的scope链里面,只有闭包里面的function可以访问到,别人都访问不到;
3,通过调用闭包里面的function,我们可以操作别人都访问不到的数据,从而起到安全和隔离的作用。
这个例子的过程:
标签:
原文地址:http://www.cnblogs.com/lewis617/p/5032299.html