仮引数のプロパティを変更するとどうなるか

変数への代入と変数のプロパティへの代入とでは全く意味が違うのは、「プロパティへの代入とプロパティのプロパティへの代入」のケースでも同じ。

function 変更(仮引数) {
  // プロパティのプロパティへの代入だから
  仮引数.子.孫 = 'b'
  // 同じもの
  console.log(仮引数.子 === 子) // true
  
  // こうすると別物になる
  仮引数.子 = 'c'
  console.log(仮引数.子 === 子) // false
}
let 子 = {孫:'a'}
let 親 = {子}
変更(親)
console.log(子, 親) // { '孫': 'b' } { '子': 'c' }