4-5编程

来源:4-5 编程练习

田马达加斯加

2018-11-02 15:00:12

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

            (function(i){

                btns[i].onclick=function(){

                    alert(i+1);

                };

            })(i)

        }

为什么这样写就不会先将for循环执行完后,再执行里边的函数了

写回答

1回答

好帮手慕星星

2018-11-02

不管代码怎么写,都是先将for循环执行完毕,给每个按钮绑定上点击事件,这样点击代码的时候才会执行事件。这道题考察的是i的作用域的问题。

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

如果使用立即执行函数,传入i参数就是局部变量,在执行点击事件的时候,会沿着当前的作用域向上找i的值,因为当前作用域中保存了i的值,也就是每一个按钮对象的i值,所以点击按钮的时候,会弹出相对应的i值。

开始编程题中的代码点击按钮弹出4,是因为当前作用域中没有i值,就找到了for循环里面,在for循环执行完毕之后,i的值变为了3,所以无论点击哪个按钮,弹出的数值都为4。

这就是两段代码的区别。

自己可以测试理解下,祝学习愉快!

0

0 学习 · 4826 问题

查看课程