js事件处理疑问

//页面显示5个超链接
for(var i=0;i<5;i++){
var a = document.createElement("a");//创建超链接a
a.setAttribute("onclick",function(){ show(i); } );//调用show函数,在下面

$("div").appendChild(a);//页面显示
}

function show(i) {
alert(i);//想显示结果1到4,现在显示的都是5
}

[code="java"]
function createA(){
var divEle=document.getElementById("divID");
for(var i=0;i<5;i++){
var ele = document.createElement("a");//创建超链接a
//ele.setAttribute("onclick",function(){ show(i); } );//调用show函数,在下面
ele.alt=i;
if(window.addEventListener){
ele.addEventListener("click",show,false);
}else{
ele.attachEvent("onclick",show);
}
ele.href='';
ele.innerHTML=i;

    divEle.appendChild(ele);//页面显示
}

}

function show() {
var srcEle=arguments[0].srcElement?arguments[0].srcElement:arguments[0].target;
alert(srcEle.alt);//想显示结果1到4,现在显示的都是5
}
[/code]

[quote]现在显示的都是5[/quote]
当i=4时 i<5成立。。所以i++,最后i=5
至于没达到你所要的结果1,4..
应该是等这几个链接显示加载完。。i加载最后一个i;
而不是你认为的一个个对应。。。

兼容IE,Firefox,chrome.

这是JS的闭包机制导致的;
show函数执行时,会动态寻找变量i所在的作用域;
因为此时i已经经由循环变成了5,所以会显示5;