1. 程式人生 > 其它 >vue 關於 provide/inject 的 簡單使用

vue 關於 provide/inject 的 簡單使用

   拷貝(copy)是指將一個目標資料複製一份,形成兩個個體。在開發中,若將一個基本資料型別(數值,字串型)的變數賦值給另一個變數,就可以得到兩個值相同的變數,
改變其中一個變數的值,不會影響另一個變數的值。但是,如果操作的目標是引用資料型別(如陣列、物件),則會出現兩個變數指向同一個物件的情況,如果改變其中一個物件
的成員,另一個物件也會發生改變。

具體程式碼如下:
<script>
    const p1={name:'張三',age:18};
    let p2=p1
    p2.name='李四';
    console.log('p1',p1);
    console.log(
'p2',p2); console.log(p1===p2) </script>
控制檯輸出結果:

 從執行結果可以看出,在變數p1賦值給p2後,更改p2的資料,p1的資料也會發生改變。這種情況下在Javascript中成為淺拷貝(shallow copy)。

     在實際開發中,淺拷貝可以節省記憶體開銷。因為一個物件可以儲存大量資料,其佔用的記憶體會比基本資料型別高。如果沒有淺拷貝機制,在將物件作為函式引數傳遞時,函式內部的實參就會建立物件的副本,多佔用一份記憶體空間,尤其是進行函式巢狀呼叫或遞迴操作時,佔用空間會越來越多。

    與淺拷貝相對應的就是深拷貝(deep copy)

,即真正建立一個物件的副本。若要實現深拷貝的效果,可以編寫程式碼複製物件裡的資料到另一個物件

程式碼如下所示:

function deepCopy(obj) {
  const arr = {};
  for (let i in obj){
      arr[i]=(typeof obj[i]==='object')?deepCopy(obj[i]):obj[i];
  }
  return arr;
}
const arr1={name:'張三',subject:{name: ['HTML','JS','Vue']}};
const arr2=deepCopy(arr1);
arr2.subject.name[0]='Css';
console.log('arr1',arr1);
console.log('arr2',arr2);
console.log(arr1===arr2);   
結果:

從上述程式碼可以看出,arr1和arr2是兩個不同的物件,在修改arr2的成員後不影響arr1的成員。