jquery的each和js中的for

下面的代码中用each会得到结果
0
123
1
456

for中结果为
2
a[]为null或不是对象

为什么.....
求解释啊

[code="java"]
$(document).ready(function(){
var a=[{name:"123"},{name:"456"}];
for(i=0;i<a.length;i++){
var b=a[i].name;
$("#row"+i).click(function(){
alert(i);
alert(a[i].name);
});
}
});

$(document).ready(function(){
    var a=[{name:"123"},{name:"456"}];
    $.each(a,function(in){
        var b=a[i].name;
        $("#row"+i).click(function(){
            alert(i);
            alert(a[i].name);
            alert(n.name);
        });
    });
1
2

[/code]

[code="js"]
$(document).ready(function(){

var a=[{name:"123"},{name:"456"}];

for(i=0;i<a.length;i++){

var b=a[i].name;
$("#row"+i).click((function(i){

return function() {
alert(i);
alert(a[i].name);
}
}) (i));

}

});
[/code]
改成这样就可以了
原来的时候当点击时去读取i的值,那时的i已经是2了 所以会出现你说的问题

了解下闭包 这个问题就解决了