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: ""}

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


PIPIONE
浏览 462回答 3
3回答

FFIVE

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

慕容708150

对象是引用类型;

开心每一天1111

因为page_ary[0]=page_ary[1]=page_ary[2]=obj
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript