2013-12-07 2 views
1

Существуют ли какие-либо возможности, в которых выход двух функций будет отличаться?Javascript - Эти функции выполняют одно и то же?

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); 
}  
+1

@Juhana: Есть что сказать, чтобы рассуждать о проблемах, даже если для начинающих требуется несколько часов. –

+0

ах ... спасибо, сэр, но я уже изучаю Javascript Окончательное руководство Дэвида Фланагана. – PhoenixWings

ответ

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 

На самом деле, поскольку функция объединения расширяет объект и расширить функциональные копии только свойство возвращения значения может быть разным:

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

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

Хотя даже в этом случае ключи и их значения будут одинаковыми.

+0

, так что, теоретически, они делают то же самое, несмотря на то, какие объекты я вставляю в качестве параметров? – PhoenixWings

+0

Различие очень важно для понимания, но да, содержимое возвращаемого объекта будет таким же. – JJJ

+0

На самом деле нет, это не так. Я отредактирую ответ. – JJJ

Смежные вопросы