作用域链的问题

来源:4-4 变量对象和作用域链

慕小课108

2020-04-07 23:21:56

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

<title>变量、作用域</title>

    

</head>

<body>

<button>4</button>

<button>5</button>

<button>6</button>

    <script type="text/javascript">

//     var btns = document.getElementsByTagName('button');

//          for (var i = 0; i < 3; i++) {

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

//     alert(i + 1);

//     };

//    }

//在此处修改代码

        var btns = document.getElementsByTagName("button");

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

            myChange(i);

        }

//这边是怎么运行的?我始终没有搞懂,老师案例讲的我可以看懂,麻烦哪位大神可以告知的??????????????

        function myChange(i){

            btns[i].onclick = function(){

                alert(i + 1);

            }

        }

    </script>

</body>

</html>


写回答

1回答

好帮手慕夭夭

2020-04-08

同学你好,参考如下理解:

循环中调用了函数myChange,每一次调用,都会形成一个独立作用域。执行过程如下:

第一次循环,i=0 ,  myChange(0) 调用函数并传入参数,执行函数里面的代码,给第一个按钮绑定了点击事件;

第二次循环,i=1 ,  myChange(1) 调用函数并传入参数,执行函数里面的代码,给第二个按钮绑定了点击事件;

第三次循环,i=2 ,  myChange(2) 调用函数并传入参数,执行函数里面的代码,给第三个按钮绑定了点击事件;

上面调用了三次函数,形成3个独立作用域,就相当于如下:

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

当点击按钮时,例如点击第一个按钮,那么执行第一个作用域中的事件,事件中获取的i值就是本作用域中传递过来的参数0 。其他的按钮同理,再理解一下哦:

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

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

0

0 学习 · 14456 问题

查看课程