关于each和js中的for

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

但是用for的话会得到
2
a[]为null或不是对象

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


$(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);
        });
    });
});

<table border="2">
<tr id="row0"><td>1</td></tr>
<tr id="row1"><td>2</td></tr>
</table>

[code="java"]<!DOCTYPE html>




111

222

zzz

<br> var divs= document.getElementsByTagName(&quot;div&quot;)<br> for(var i = 0;i<divs.length;i++){<br> divs[i].onclick=(function(z){<br> return function(){<br> alert(z)<br> return false;<br> }<br> })(i)<br> }<br>


[/code]
代码在点击的时候才执行。点击的时候已经不存在数组a了并且i也是最后的值2
如果把for(i=0.....改为for(var i=0.....那么i也不存在了

请搜索"闭包"

a是局部变量
所以点击的时候已经不存在了
i是全局变量,所以点击的时候是循环最后一次的时候的值