老师 为什么不加外面那层函数就一直弹出4呢 闭包到底是怎样的一个原理呢

老师 为什么不加外面那层函数就一直弹出4呢 闭包到底是怎样的一个原理呢

<!DOCTYPE html> 

<html> 

<head> 

    <meta charset="UTF-8" /> 

    <title>方法的调用</title> 

    <style type="text/css">

       li{

         cursor: pointer;

         border: 1px solid red;

         width: 20px;

        }

    </style>

</head> 

<body> 

  <ul>

       <li>1</li>

       <li>2</li>

       <li>3</li>

       <li>4</li>

    </ul>

    <script type="text/javascript"> 

   // 在此处完成任务

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

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

   //      function add(i){

//    li[i].onclick=function(){

//    alert(i);

//    }}

//    add(i);

   // }

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

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

    li[i].onclick=function(){

    alert(i);

    }

   }

  

   

    </script> 

</body> 

</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕言 2020-04-09 16:19:28

同学你好,把事件放在一个函数中,然后利用参数传递i值。如下:

http://img1.sycdn.imooc.com//climg/5e8ed65b098b714b04200152.jpg

http://img1.sycdn.imooc.com//climg/5e8edab50998ca0801040050.jpg

因为函数是一个局部作用域。循环几次,就调用几次函数,就形成了几个不同的作用域。即每一个函数中通过自己的参数保存下来了当前循环的i值。同学可以再理解下。

祝学习愉快~

好帮手慕言 2020-04-09 13:57:16

同学你好,由于for循环在页面加载时会立即执行,而点击事件是在点击时触发的,因此在点击事件里面使用i值,是循环之后的值,在同学提供的代码中i是4。

关于闭包,老师在视频中有讲解,同学可以去回顾下,链接:https://class.imooc.com/lesson/791#mid=19881

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 小鲜花 #1
    加上外面那层函数循环就不会一次执行完毕 是什么原因呢
    2020-04-09 14:23:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师