之前花了很多时间看书上对闭包的介绍,也看了很多人的写的关于闭包的博客,然后我就以为自己懂了。
结果,下午在一个QQ群里,有人问了这道经典的闭包问题,如下图:
我告诉他去看书上的闭包介绍。告诉他之后,我想我自己要不也写一下,反正花不了多少时间,结果花了好久怎么写也不对..............
后来看了看书上的,然后自己总结了下,觉得这次应该懂了。下次还不理解我就可以去跳楼了............
-----------------------------------分割线-----------------------------------分割线--------------------------
首先我们来了解几个概念:
立即执行函数:形如 (function(){})();的一类函数;
闭包:闭包是指有权访问另一函数作用域中的变量的函数。
作用域链:当代码执行的时候,会创建变量对象的一个作用域链....(具体百度)
我们再来看这个问题,我重新写了一个,源码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>闭包经典例子详解——huansky</title> </head> <body> <div id="ttt"> <p >000000000000000000</p> <br> <p >111111111111111111</p> <br> <p >222222222222222222</p> </div> </body> <script> var dom=document.getElementsByTagName("p"); for(var i=0;i<dom.length;i++){ dom[i].onclick=function(){ console.log(i);//3 }; } </script> </html>