:
var mainArray = [
someObject,
anotherObject
];
var subArray = [];
subArray.push(mainArray[ 0 ]);
...何がメモリ内に持っていることはビットのようになります。mainArray
とsubArray
間の接続が全く存在しないこと
+−−−−−−−−−−+
someObject−−−−−−−−−−−−−−−−−−+−−+−−−−−−−−−−−−−−−−−−>| (object) |
// +−−−−−−−−−−+
| |
| | +−−−−−−−−−−+
| | anotherObject−−−+−>| (object) |
| | / +−−−−−−−−−−+
| | |
+−−−−−−−−−−−+ | | |
subArray−−−−>| (array) | | | |
+−−−−−−−−−−−+ | | |
| length: 1 | | | |
| 0: |−/ | |
+−−−−−−−−−−−+ | |
| |
+−−−−−−−−−−−+ | |
mainArray−−−−>| (array) | | |
+−−−−−−−−−−−+ | |
| length: 2 | | |
| 0: |−−/ |
| 1: |−−−−−−−−−−−−−−−−−−−−/
+−−−−−−−−−−−+
注意。両方とも、同じ値を持っています(someObject
の値でもあり、3つの場所すべてに同じオブジェクトのオブジェクト参照があります)。 mainArray
からその値を削除
はsubArray
(またはオブジェクト上)には影響を与えません。
mainArray.splice(0, 1);
+−−−−−−−−−−+
someObject−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−−−−>| (object) |
/ +−−−−−−−−−−+
|
| +−−−−−−−−−−+
| anotherObject−−−+−>| (object) |
| / +−−−−−−−−−−+
| |
+−−−−−−−−−−−+ | |
subArray−−−−>| (array) | | |
+−−−−−−−−−−−+ | |
| length: 1 | | |
| 0: |−/ |
+−−−−−−−−−−−+ |
|
+−−−−−−−−−−−+ |
mainArray−−−−>| (array) | |
+−−−−−−−−−−−+ |
| length: 1 | |
| 0: |−−−−−−−−−−−−−−−−−−−−/
+−−−−−−−−−−−+
だからそれに基づく:
1は、スプライシングされますか?
いいえ、mainArary
の内容を変更してもsubArray
には影響しません。
2.値がまだ存在していますか?
subArray
のエントリの値0
は影響を受けません。
3.空の値が残っていますか?
いいえ、subArray
には何の効果もありません。
私はより良いスプライスに関連して参考作品に渡す方法を理解しようとしています。
「参照」という言葉には2つの異なる意味が混乱しています(多くの人が行います)。
「参照渡し」は、プログラミングの術語です。つまり、具体的な意味を持っています。への参照を変数に渡すことで、関数はその変数の内容を手に入れて変更することができます。 JavaScriptには参照渡しがありません。
オブジェクト参照は、参照渡しとは関係ありません。両方のコンセプトには「参照」という単語が含まれています(ただし、完全に異なるもの)
オブジェクト参照は値です。オブジェクトはメモリ内にあるJavaScriptエンジンに伝えられます。
に何が起こっているのか明確にしようとするあなたの例を少し拡張してきました** **は参照渡したJavaScriptにはありません。 「参照渡し」という用語は、プログラミングにおいて特定の意味を持っています(これは「芸術の用語」です)。参照*を変数*に渡して関数に渡します。 JavaScriptはそれを持っていません。 –
上記の作業は、オブジェクト参照を関数に渡すことです(値によって、値はオブジェクト参照です)。 –
いいえ、はい(TJが言ったように、 "ポインタ"は値です)、いいえ.... – RobG