关于闭包

闭包是指一个函数,其可以调用另一个函数作用域中的变量;

闭包只能取得包含函数中任何变量的最后一个值,如:

<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <ul>
             <li>click me</li>
             <li>click me</li>
             <li>click me</li>
              <li>click me</li>
        </ul>
        <script type="text/javascript">
                var elements=document.getElementsByTagName('li');
                var length=elements.length;
                 for(var i=0;i<length;i++){
                         elements[i].onclick=function(){
                        alert(i);
                        }
                    }
   
    </script>
    </body>
    </html>

因为闭包,点击每一个,弹出的结果都为4;

可以通过创建另一个匿名函数,强制让闭包的行为符合预期。

 1     <!DOCTYPE html>
 2     <html lang="en">
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>Document</title>
 6     </head>
 7     <body>
 8         <ul>
 9              <li>click me</li>
10              <li>click me</li>
11              <li>click me</li>
12               <li>click me</li>
13         </ul>
14         <script type="text/javascript">
15                 var elements=document.getElementsByTagName('li');
16                 var length=elements.length;
17                  for(var i=0;i<length;i++){
18                          elements[i].onclick=function(num){
19                       return  function(){
20                              alert(num);
21                        }
22                            
23                         }(i)
24                     } 
25     </script>
26     </body>
27     </html>

猜你喜欢

转载自www.cnblogs.com/sunmarvell/p/9003942.html