Javascript-这些函数做的是相同的事情吗?

Javascript-这些函数做的是相同的事情吗?,javascript,object,Javascript,Object,两个函数的输出是否可能不同 var o1 = {x1:1,y1:2,z1:3}; var o2 = {x2:4,y2:5,z2:6}; function extend(o1,o2) { for(p in o2) { o1[p] = o2[p]; } return o1; } function union(o1,o2) { return extend(extend({}, o1), o2); } 返回值

两个函数的输出是否可能不同

 var o1 = {x1:1,y1:2,z1:3};
 var o2 = {x2:4,y2:5,z2:6};

 function extend(o1,o2)
 {
   for(p in o2)
   {
      o1[p] = o2[p];   
   }    

   return o1;
 }

 function union(o1,o2)
 {
    return extend(extend({}, o1), o2);   
 }    

返回值总是不同的,尽管返回对象的内容总是相同的

函数extend修改第一个对象,union返回一个新对象。换言之:

var o1 = {x1:1,y1:2,z1:3};
var o2 = {x2:4,y2:5,z2:6};

union( o1, o2 );  // both o1 and o2 are unchanged, function returns a new object
extend( o1, o2 ); // returns o1 which has now been changed
实际上,由于union函数扩展对象,而extend函数仅复制属性,因此返回值可能不同:

var o1 = [ 1, 2 ];
var o2 = [ 3, 4 ];

union( o1, o2 );  // returns an object
extend( o1, o2 ); // returns an array

尽管即使在这种情况下,键及其值也会相同。

返回值总是不同的,尽管返回对象的内容总是相同的

函数extend修改第一个对象,union返回一个新对象。换言之:

var o1 = {x1:1,y1:2,z1:3};
var o2 = {x2:4,y2:5,z2:6};

union( o1, o2 );  // both o1 and o2 are unchanged, function returns a new object
extend( o1, o2 ); // returns o1 which has now been changed
实际上,由于union函数扩展对象,而extend函数仅复制属性,因此返回值可能不同:

var o1 = [ 1, 2 ];
var o2 = [ 3, 4 ];

union( o1, o2 );  // returns an object
extend( o1, o2 ); // returns an array

虽然即使在这种情况下,键和它们的值也是一样的。

@Juhana:对于一个问题的推理,即使初学者需要几个小时,也有一些话要说。啊。。。谢谢你,先生,但我已经在学习David Flanagan的权威指南Javascript。@Juhana:对于一个问题的推理,即使需要初学者几个小时,也有一些话要说。啊。。。谢谢,先生,但我已经在学习David Flanagan的权威指南Javascript。因此,理论上,无论我插入哪些对象作为参数,它们都在做同样的事情?这一区别对于理解非常重要,但是的,返回对象的内容将是相同的。因此,理论上,不管我插入哪些对象作为参数,它们都在做同样的事情?区别对于理解非常重要,但是是的,返回对象的内容将是相同的。