js深淺拷貝, 討論在函式返回obj時是否需要解決淺拷貝問題
阿新 • • 發佈:2020-08-14
結論 需要
- 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); // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=