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