js for循环问题

var page_ary=[]; 
  var obj={};
  //var j=0;
  for(var i=1;i<=3;i++){
    obj.page=i;
    obj.cla='';
    //j=i;
    console.log('i','---',i);
    console.log('obj','---',obj);
    page_ary[i-1]=obj;
    console.log('page_ary','---',page_ary);
  }     

打印出来的page_ary

{page: 3, cla: ""}

{page: 3, cla: ""}

{page: 3, cla: ""}

如果把obj声明放在里面就可以了

var page_ary=[]; 
  //var j=0;
  for(var i=1;i<=3;i++){
    //放在这里
    var obj={}
    obj.page=i;
    obj.cla='';
    //j=i;
    console.log('i','---',i);
    console.log('obj','---',obj);
    page_ary[i-1]=obj;
    console.log('page_ary','---',page_ary);
  }  

打印结果就是这样

{page: 1, cla: ""}

{page: 2, cla: ""}

{page: 3, cla: ""}

谁能解释一下这是为什么??? 谢谢!!!

阅读 1.7k
3 个回答

for循环结束后,i=3;
obj在循环外(又是一个对象,会被引用。你不用对象就不会有问题)最后拿到的就都是i=3的时候的数据。
所以你需要把obj的声明放循环里面,每次循环结束后,obj这个对象都会被重新构造,不会出引用问题,赋值就OK了。

对象是引用类型;

因为page_ary[0]=page_ary[1]=page_ary[2]=obj

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题