1. 程式人生 > 實用技巧 >js深淺拷貝, 討論在函式返回obj時是否需要解決淺拷貝問題

js深淺拷貝, 討論在函式返回obj時是否需要解決淺拷貝問題

結論 需要

  • js函式是淺拷貝確定無疑, 沒想到 經過函式返回的資料也是淺拷貝.
  • 所以想像其他語言那樣 provice 變數 有點困難, 需要先解除淺拷貝後返回, 否則變數汙染依然存在

// js obj淺拷貝測試

var person = new Object();
person.name = 'abc';
person.obj = new Object({
    name: 'bcd'
});

person.fun = function() {
    // test 1
    // return this.name;
    // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

    // test 2
    return this.obj;
    // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
}

// test 1
// console.log('person.name', person.name);
// var name = person.fun();
// console.log('name', name);
// name = '222';
// console.log('name', name);
// console.log('person.name', person.name);
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

// test 2
console.log('person.obj', person.obj);
var name = person.fun();
console.log('name', name);
name.name = '222';
console.log('name', name);
console.log('person.obj', person.obj);
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=