副作用のない関数
実践JavaScript / 全 5 枚
実践JavaScript - 副作用のない関数
渡した配列が書き換わってしまう
関数に配列を渡すと、中身のオブジェクトは呼んだ側と同じものです。関数の中でその場で書き換えると、戻り値を受け取ったつもりが元の変数まで変わります。
コピーしたつもりで同じものを指している、というのがこの事故の中身です。次の図解で箱と矢印の数を数えます。
result を見ているつもりが、元の works の中身まで 440 になっています。
const works = [{ title: "家計簿アプリ", views: 340 }];
function boost(list) {
list[0].views += 100;
return list;
}
const result = boost(works);
console.log(works[0].views); // 4401 / 5
← → キーでも送れます