js闭包问题----为什么写法1的参数是数字而写法2的参数为mouseEvent?

**********************写法1************************************8

<body>

  <ul class="ul">

    <li>chun</li>

    <li>xia</li>

    <li>qiu</li>

    <li>dong</li>

  </ul>

 

<script>

  var lis = document.getElementsByTagName('li');

  for(var i=0;i<lis.length;i++){

    lis[i].onclick = (function(i){

      return function(){

        alert(i);

      }

    })(i);

  }

  </script>

</body>

*****************************写法2*********************

<body>

  <ul class="ul">

    <li>chun</li>

    <li>xia</li>

    <li>qiu</li>

    <li>dong</li>

  </ul>

  <script>

  var lis = document.getElementsByTagName('li');

  for(var i=0;i<lis.length;i++){

    lis[i].onclick = function(i){

      alert(i);

    }

  }

</script>

***********************************************************

为什么写法1的参数是数字而写法2的参数为mouseEvent?

赵日天l
浏览 1513回答 2
2回答

Judy_1024

关于写法1:可以参考这里的回答   http://www.imooc.com/wenda/detail/326776写法2:事件调用的函数的第一个参数是事件对象本身;作用域的问题,可以看看http://www.imooc.com/learn/277 第6、7章。

_潇潇暮雨

写法1是一个匿名立即执行函数,俗称IIFE,它接受一个外部参数i,这个参数i和for循环里面的i是一样的,所以会打印出数字,写法2中的i是事件对象event。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript