关于闭包

Posted sunmarvell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于闭包相关的知识,希望对你有一定的参考价值。

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

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

<!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>

 

以上是关于关于闭包的主要内容,如果未能解决你的问题,请参考以下文章

关于闭包那些事儿

关于闭包

JS---闭包

关于闭包的理解

关于闭包的初级入门

关于js中闭包的理解