答案 0 :(得分:2)
从技术上讲,与r和r2没有区别。
但请注意$ .extend()行为 http://api.jquery.com/jQuery.extend/
注1 jQuery.extend(target [,object1] [,objectN])
var r = $.extend(object1 , object2 );
// mean now we merge object2 into object1 so object1={ a: 'a', b: 2, c: 'c'}
console.log(object1) // return { a: 'a', b: 2, c: 'c'}
console.log(r) // return { a: 'a', b: 2, c: 'c'}
注2 jQuery.extend([deep],target,object1 [,objectN])
var objA = { k: 1, b: 2};
var objB = { k: 2, b: 'b', z:9};
var ret = $.extend(true, objA, objB); // when true as first parameter = merge recursive (deep copy)
console.log(objA); // return { k: 2, b: 'b', z:9}
console.log(ret); // return { k: 2, b: 'b', z:9}
注3 如果我们将False或{}作为第一个参数传递会发生什么。
var objA = { k: 1, b: 2};
var objB = { k: 2, b: 'b', z:9};
var ret = $.extend(false, objA, objB);
console.log(objA) // return { k: 1, b: 2}
console.log(ret) // return { k: 2, b: 'b', z:9}
从上面的示例中,我们可以看到真正的深层复制会相应地通过其他 objectN 值更新目标值