两种功能的输出是否有可能不同?
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);
}
答案 0 :(得分:4)
返回值始终不同,但返回的对象的内容始终相同。
函数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
虽然在这种情况下,键和它们的值也是相同的。