🐡
JSのconsole.logの思わぬ落とし穴にはまって苦しんだ話
結論
- JSのconsole.logは参照渡し
- 各時点の値を保持しているのではない
- 最後に値が確定したらその値で上書きされる?
以下の記事が非常に参考になりました。本当に感謝しかないです。。。
苦労(私)
例
let obj = {
a: '1'
}
console.log(obj) // => {a: '2'}
obj.a = "2"
console.log(obj) // => {a: '2'}
あとがき
後でわかったのですが、関数の引数も参照渡しなんですね。値渡してると思ってめんどくさいことに。。。console.logも関数の引数だから?オブジェクトは基本参照渡しなんですかね?
関連ページ
Discussion
参照渡しでいうところの参照渡し (関数の 仮引数に対する代入が実引数に反映される事象)ではなくて、この場合はオブジェクトの状態を変更しているだけなので オブジェクトの破壊的操作ってだけですね。参照値は変わらないです。(値型とごっちゃにされておられますでしょうか?
気になるのであれば structuredClone をお勧めします。