我对代码进行的注释分析和解决方法对吗
// 注释分析
function click(i){
//2 这里写i。若i = 2;循环里的i被覆盖,写这里i会直接固定成2,并且局部变量的i也会变成2,找到i后直接return,终止外部for循环,且按钮索引值固定,只有一个点击事件生效
btns[i].onclick = function () { //这里function(写i) 会直接让i固定为0,0由第一次for循环i的赋值
//1 这里写i。循环里的i被覆盖,直接按下一次循环;
alert(i + 1);
};
}
for (var i = 0; i < 3; i++) {
//3 这里写i。若i = 2;循环里的i被覆盖,写这里i会直接固定成2,并且局部变量的i也会变成2,找到i后直接return,终止外部for循环,且按钮索引值固定,只有一个点击事件生效
click(i);
}
// 解决方案
// 方法一
btns[0].onclick = function () {
alert(0 + 1);
};
btns[1].onclick = function () {
alert(1 + 1);
};
btns[2].onclick = function () {
alert(2 + 1);
};
// 方法二
function click(i){
btns[i].onclick = function(){
alert(i+1);
}
}
for (var i = 0; i < btns.length; i++) {
click(i);
}
正在回答
同学你好,老师没怎么看懂同学注释内容是什么意思,而且,同学添加注释的代码和提供的解决方法二的代码是一样的实现思路,只不过是将for循环的条件由固定值3改成了按钮的长度而已。实现的效果是一样的。
如下所示写法的思路,主要是从作用域的角度分析, 即: 每循环一次就调用一次click函数, 在函数的作用域中会保存当前的i值, 所以每次点击的时候, 向上查找作用域就是找到click函数中保存的不同的i值。并不是同学注释中的说的什么覆盖。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星