请老师检查一下

来源:2-9 编程练习

上心4409406

2019-10-12 10:02:19

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>2-1</title>

    <style>

    li{

        cursor:pointer;

    }

    </style>

</head>

<body>

    <ul>

        <li>000</li>

        <li>111</li>

        <li>222</li>

        <li>333</li>

        <li>444</li>

        <li>555</li>

    </ul>

    <script>

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

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

            (function(i){

               li[i].onclick = function(){

                   alert(i);

               }

            })(i)

        }

    </script>

</body>

</html>

以前做过这种练习 给每个按钮循环绑定事件 但是我没搞懂这个和闭包的关系 

写回答

1回答

好帮手慕星星

2019-10-12

同学你好,

代码实现效果正确,很棒哦!

可以参考下面的解释:

(1)函数嵌套函数,这是闭包的一个结构。在本代码中,外层立即执行函数嵌套里面的事件函数。

(2)函数里的子函数被函数外部一直使用,使子函数无法释放,保持其所在作用域,形成一个封闭的作用域,称之为闭包。

本代码中,子函数给元素li绑定,所以子函数是被元素使用的(这就是被外部使用)无法释放(事件被保存下来了),变量i在事件中使用到了,所以它不能销毁,这样每一个事件都能拿到自己当前作用域下面的i值了。如下图:

http://img.mukewang.com/climg/5da145270972fd7503950417.jpg

可以再理解下,祝学习愉快!

0

0 学习 · 14456 问题

查看课程