一、在每个a元素上创建属性i来保存当前i的值
var one=document.getElementById("one").getElementsByTagName("a"); for(var i=0;i<one.length;i++){ one[i].i=i; one[i].onclick=function(eventObject){ LS.preventDefault(eventObject); LS.log.write(this.i); } }
二、将变量i保存在匿名函数自身
var two=document.getElementById("two").getElementsByTagName("a"); for(var i=0;i<two.length;i++){ (two[i].onclick=function(eventObject){ LS.preventDefault(eventObject); LS.log.write(arguments.callee.i); }).i=i; }
三、加一层闭包,i以函数参数形式传递给内层函数
var three=document.getElementById("three").getElementsByTagName("a"); for(var i=0;i<three.length;i++){ (function(arg){ three[i].onclick=function(eventObject){ LS.preventDefault(eventObject); LS.log.write(arg); } })(i); }
四、加一层闭包,i以局部变量形式传递给内层函数
var four=document.getElementById("four").getElementsByTagName("a"); for(var i=0;i<four.length;i++){ (function(){ var temp=i; four[i].onclick=function(eventObject){ LS.preventDefault(eventObject); LS.log.write(temp); } })(); }
五、加一层闭包,返回一个函数作为响应事件
var five=document.getElementById("five").getElementsByTagName("a"); for(var i=0;i<five.length;i++){ five[i].onclick=function(arg){ return function(eventObject){ LS.preventDefault(eventObject); LS.log.write(arg); } }(i); }
六、new一次就产生一个函数实例
var six=document.getElementById("six").getElementsByTagName("a"); for(var i=0;i<six.length;i++){ six[i].onclick=new Function("LS.log.write("+i+");LS.preventDefault(arguments[0]);"); }
七、
var seven=document.getElementById("seven").getElementsByTagName("a"); for(var i=0;i<seven.length;i++){ seven[i].onclick=Function("LS.log.write("+i+");LS.preventDefault(arguments[0]);"); }