日期:2014-05-16 浏览次数:20490 次
请看下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>js參數傳遞問題</title> <script type="text/javascript"> var $ = function (id) { return "string" == typeof id ? document.getElementById(id) : id; }; function addEventHandler(oTarget, sEventType, fnHandler) { if (oTarget.addEventListener) { oTarget.addEventListener(sEventType, fnHandler, false); } else if (oTarget.attachEvent) { oTarget.attachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType] = fnHandler; } }; </script> <style type="text/css"> #idGlideView div{width:500px;height:50px;} </style> </head> <body> <div id="idGlideView"> <div style="background-color:#006699;"> <a href="/">1111111</a> </div> <div style="background-color:#FF9933;"> <a href="/">2222222</a> </div> <div style="background-color:#9999FF;"> <a href="/">3333333</a> </div> <div style="background-color:#006699;"> <a href="/">4444444</a> </div> <div style="background-color:#FF9933;"> <a href="/">5555555</a> </div> <div style="background-color:#9999FF;"> <a href="/">6666666</a> </div> </div> <script type="text/javascript"> function addClickForAll(){ var _div = $("idGlideView"); var _list =_div.getElementsByTagName("div"); var _count = _list.length; for( var kk = 0 ; kk < _count ; kk++ ){ addEventHandler( _list[kk], "click" , function(){ alert(kk);} ); } } addClickForAll(); </script> </body> </html>?
我想把点击每个层,就alert出对应的1,2,3,4,5,6
但是这样循环添加事件,alert出来的就都是6。
向大家请教下,这个参数传递过程。。
?
----------------------------------------------- 追加------------------------------
看了些文章,这样理解的
在每次for迭代的时候,这样的语句 “addEventHandler( _list[kk],? "click" ,function(){
alert(kk);}?? ); ”
中的function(){ alert(kk);}
并没有被执行,只是构建了一个函数体为”alert(kk);”的函数对象。
所以当再次调用的时候,这时的kk已经最后的一个值。
我想问,为什么这句 “alert(kk);” 就不执行?
是因为闭包的原因,这句“alert(kk);”才不执行吗?