正在回答 回答被采纳积分+1
2回答
好帮手慕糖
2019-07-22 20:22:55
同学你好,1、这个是函数的自执行,相当于我写了个函数,然后后面的()把这个函数调用了。
2、后面调用的这个括号的值,就是传递的值,是实参,function这里的这个是形参。每循环一次,传递一次,传递的就是循环的这个值。
3、因为执行循环的时候,给每个绑定了,这个时候i还不全是3,但是到最后点击的时候,是已经绑定好了的,也已经循环完了,所以点击的时候,就是最后的值了。是因为是先绑定后触发的。
4、给k初始值为1时,只有按钮2和3会绑定事件,说明决定绑定事件的不是原来的i而是k
这句话不太严谨哦,传递的不一定要是k,传递i也是可以的。这个主要是由你传递的值决定的,你实参传递进去几,形参就是几。
这个是后面也会学到,同学可以先了解下哦。
祝学习愉快!
且听风吟720
2019-07-22 18:03:04
var btns = document.getElementsByTagName('button'); var k = 0; for (var i = 0,k=1; i < btns.length,k<3; i++,k++) { (function (i){ console.log(i); console.log('内部打印的k是'+k) btns[i].onclick = function(){ alert(i+1); } })(k); console.log('外部打印的k是'+k); }
我试着把函数的参数换成了两个,在上面所示的代码下,控制台输出结果如下:
我能理解出来的是,把for循环下面的最外层function用括号括起来之后,实际上传入的参数是倒数第二行的那个i(上方修改的代码里的k),紧跟着function后面的括号里的i是形参,推测原因有两条:
1.当设置k可以循环到3时,控制台会报错,但是控制台输出了i=3这一行,说明现在的i不是实参
2.给k初始值为1时,只有按钮2和3会绑定事件,说明决定绑定事件的不是原来的i而是k
这些是我的推测,也希望老师能看到给出一个更完整的回答!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星