splice() と console.log() の実行順序について教えてください

console.log() はそれが展開されたときに再評価される、という仕様になっています。
2021年8月28日
ユーザー

今までに学習した配列操作と、今回学習した配列とオブジェクトの組みわせを使って以下のようなコードを書いたのですが、期待した実行結果が得られませんでした。

const point = {
    x: 100,
    y: 200,
  }

const points = [
    {x: 30, y: 40},
    {x: 20, y: 10},
    {x: 50, y: 30},
  ]

  points.push(point);
  console.log(points);

  points.splice(1, 2, {x: 200, y: 300}, {x: 150, y: 250});
  console.log(points);

上記のコードが記述通りの実行順序であるならば、以下のような実行結果になることを期待していました。

[
0: {x: 30, y: 40}
1: {x: 20, y: 10}
2: {x: 50, y: 30}
3: {x: 100, y: 200}
]

[
0: {x: 30, y: 40}
1: {x: 200, y: 300}
2: {x: 150, y: 250}
3: {x: 100, y: 200}
]

しかし、実際の実行結果が以下のようになりました。

[
0: {x: 30, y: 40}
1: {x: 200, y: 300}
2: {x: 150, y: 250}
3: {x: 100, y: 200}
]

[
0: {x: 30, y: 40}
1: {x: 200, y: 300}
2: {x: 150, y: 250}
3: {x: 100, y: 200}
]

この結果から予想されることとして、splice()push() などが全て console.log より先に実行されるのではないかと考えました。だとすれば元々期待していた実行結果を得るためにはどうしたら良いのでしょうか?

この回答を見るにはプレミアムプランへの登録が必要です

プレミアムプランとは?

このレッスンの質問と回答(15)