変数 A が変数 B に割り当てられると、スタック内の値が新しい変数に割り当てられたスペースにコピーされます。
どのように理解すればよいでしょうか?
var x = y = 1; >y = 2;
alert(x);
x の値は何ですか?
var obj = {}; var sub = {};
sub['id'] = 3;
sub['id'] = 4; sub'] ['id']);
obj['sub']['id'] の値は何ですか?本当にあなたの期待に応えられるのでしょうか?
2 つのコードをそれぞれ実行したところ、プログラムの最初の部分の x の値は変化しませんでしたが、2 番目の部分の obj['sub']['id'] の値が変化したことがわかりました。のプログラムが変更されました。これは代入操作でもあり、別のコピーの値も変更します。なぜプログラムのセクションのソース変数は変更されないのですか?この転送は値によるものですか、それとも参照によるものですか?
その答えは、Li Songfeng 訳『JavaScript Advanced Programming Second Edition』に記載されています。
最初の 2 つの例では、A の値が実際に B にコピーされます。違いは、最初の例では A の値が int 型の 1 であるのに対し、2 番目の例では A の値が int 型であることです。コピー後、最初の例の B の値は新しい int になり、その値は 1 になります。一方、2 番目の例では、B の値は新しいアドレス ポインターになり、その値はこのオブジェクトのアドレス。
次の例は理解に役立ちます
コードをコピーします
obj = {};
obj.name = "test2"; = new Object() ;
setName(person);
ご覧のとおり、setName 関数は name 属性を変更するために呼び出されます。変数 person.name 値は変更されていません。これは、関数内で obj が指すアドレスが変更されるため、このアドレスの name 属性を変更しても、元のアドレスの name 属性には影響しません。別の側面から見ると、JavaScript が値によって渡されることも確認されます。