iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
0
自我挑戰組

30 天 node.js 學習筆記系列 第 15

Day 15 call by value, call by share

  • 分享至 

  • xImage
  •  

Js 宣告變數時都會為變數開一份記憶體位置,去存放值:
傳遞基本資料型別是 call by value,傳值時會複製一份過去,彼此修改互不影響。
但在傳遞物件型別 EX: object, array, function 時,則看起來很像 call by reference ,但其實不然,

看看以下例子:

    var o1 = {
    	name: 'Joe'
    }
    
    var o2 = o1;
    
    o2.age = 10; /* 此時因為與 o1 都指向同一份 ref,所以兩邊修改都是改到同一份資料,再看看下面 */
    
    o1 = 0;
    /*這時 o1 已被修改成 1,剛剛說傳物件傳的是 ref,所以如果直接覆寫這個物件,照理來講應該 o1 & o 都 
    應該,變成 1 才合理,結果是完全沒改變,因為 js 在傳遞物件時的機制是 call by share 
    */
    
    console.log(o2);
    // log
    /*
    {
    	name: 'Joe',
    }
    */

那麼什麼是 call by share ??

剛剛一開始說了 js 會在宣告變數時為他開一份記憶體位置,經由 call by value 時是複製一份值進去。

經由 call by share 時,其實是“複製”參考進去,所以在 function 當中覆寫,傳進來的變數,原本的物件,也不會被修改。

像剛剛例子 o1 又覆寫了,但 o2 依舊是原本的物件,經過剛剛 call by share 的推倒,可以得知 o1 只是把它 memory 裡的空間,換成了 0 ,並沒有直接改到原本物件的 memory 位置。


上一篇
Day14 Pure Function
下一篇
Day 16 await && async
系列文
30 天 node.js 學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言