关于JS的作用域,值传递的问题

wang_kai_7 2018-03-10 12:18:03
var arr=[];
var obj=new Object() ;
var a=[1,2,3,4],b=[1,2,3,4];
for(var i=0;i<4;i++){
obj.name=a[i];obj.value=b[i];
arr.push(obj)
}; console.log(arr);[/b][/size]

0: {name: 4, value: 4}1: {name: 4, value: 4}2: {name: 4, value: 4}3: {name: 4, value: 4}

var arr=[];
var a=[1,2,3,4],b=[1,2,3,4];
for(var i=0;i<4;i++){
var obj= new Object();
obj.name=a[i];obj.value=b[i];
arr.push(obj)
}; console.log(arr)
0: {name: 1, value: 1}1: {name: 2, value: 2}2: {name: 3, value: 3}3: {name: 4, value: 4}

为什么obj定义的位置不同,结果会不同
...全文
344 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
无聊的上午 2018-03-13
  • 打赏
  • 举报
回复
定义在外面,每次执行时,上一个数据会被下一个数据覆盖,如果想和下面的方式达到一样的效果,只需要再循环里面加一句话 obj={} 每次进入循环前清空obj中的数据
annerayke 2018-03-12
  • 打赏
  • 举报
回复
第一个obj是在for循环的外部定义的,每次循环放入的对象是同一个对象,因此最后的值被4覆盖。 第二个obj是在for循环中定义,每次给对象的属性赋值时都不是同一个对象。
zzq2980 2018-03-12
  • 打赏
  • 举报
回复
第一个 定义的时候是一个对象,循环里面是每次都是改变这个对象,将这个对象放到数组里,每次放的都是同一个对象,并不是值! 第二个 每次放的都是新对象
似梦飞花 2018-03-10
  • 打赏
  • 举报
回复
第一个数组放的是同一个对象 其他地方修改这个对象 数组里的项也会跟着修改 第二个每个项都是一个新的对象 修改其他项里的对象只会影响自己

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧