检查一下代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>变量、作用域</title> </head> <body> <button>1</button> <button>2</button> <button>3</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; i < btns.length; i++) { btnClick(i,btns); }; function btnClick(i,btns) { btns[i].onclick = function () { alert(i + 1); }; } </script> </body> </html>
1、传两个参数的写法是不是不好,还是只是传一个参数i写法好?
2、能解释一下第一段代码每次点击都是4吗?原理是什么?for的作用机制是什么?好像是执行完for循环才会执行点击事件
1
收起
正在回答
2回答
同学你好,可以这么说,但是准确的说,不是重新写了3个事件。而且开辟了3个作用域。
每循环一次就调用一次函数, 在函数的作用域中会保存当前的i值, 所以每次点击的时候, 向上查找作用域就是找到函数中保存的不同的i值。
希望能帮助到你,祝学习愉快!
好帮手慕糖
2019-09-15 11:18:49
同学你好,1、实现效果很好。两个参数也是可以的哦,这样若是有其他元素调用的话,传递对应的元素即可。
2、是的哦,是循环完才执行的点击事件。
(1)for的机制,就是先执行var i= 0;初始化,然后判断i<btns.length;若是i小于的话,符合条件执行里面的内容。然后执行i++;i加之后,在进行判断。然后符合在继续执行里面的内容。不符合结束循环。
(2)其实这两主要是因为先绑定后触发。
在循环的时候给每个元素绑定了事件。但是这个事件是需要在点击的时候才触发的。没有点击不触发。在点击的时候,循环已经结束了,所以i的值就是循环结束之后的值。
希望能帮助到你,欢迎采纳。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星