日期:2014-05-16 浏览次数:20560 次
请看下面代码
<!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);”才不执行吗?