私はオブジェクトを持っています。それは関数内の多くの異なる関数に渡されます。これらの関数はオブジェクトの値を変更する場合と変更しない場合がありますが、変更する場合は、オブジェクトの最新の変更を取得したいと思います。
以下は私がやろうとしていることです:
var ob = {text: 'this is me', name: 'john'}
function (object) {
changeObject(object);
customObjectChanger(object);
callback = function (object) {
object.text = 'new text';
}
callback(object);
// object value here should be object{text: 'new text', name: 'john'};
}
JavaScriptでは、オブジェクトは常にcopy-referenceによって渡されます。それが正確に正しい用語かどうかはわかりませんが、オブジェクトへの参照のコピーが渡されます。
これは、関数の実行が完了した後、オブジェクトに加えられた変更が表示されることを意味します。
コード:
var obj = {
a: "hello"
};
function modify(o) {
o.a += " world";
}
modify(obj);
console.log(obj.a); //prints "hello world"
そうは言っても、渡された参照のコピーのみであるため、re-assign関数内のオブジェクトの場合、これはnotは、変更した参照のコピーのみであるため、関数の外部からは見えません。
コード:
var obj = {
a: "hello"
};
function modify(o) {
o = {
a: "hello world"
};
}
modify(obj);
console.log(obj.a); //prints just "hello"
「オブジェクト」はJavaScriptの値ではないため、「渡す」ことはできません。
扱っている値はすべて参照(オブジェクトへのポインター)です。
参照を渡すか割り当てると、同じオブジェクトを指す別の参照が与えられます。もちろん、他の参照を介して同じオブジェクトを変更できます。
これは、値渡しおよび参照渡し(Javascript)の詳細な説明です。このコンセプトでは、変数を参照渡しすることと、変数を参照渡しすることについて話します。
値渡し(プリミティブ型)
var a = 3;
var b = a;
console.log(a); // a = 3
console.log(b); // b = 3
a=4;
console.log(a); // a = 4
console.log(b); // b = 3
a
はメモリ(たとえば0x001)に割り当てられ、b
はメモリ内の値のcopy(たとえば0x002)を作成します。参照渡し(オブジェクト)
var c = { "name" : "john" };
var d = c;
console.log(c); // { "name" : "john" }
console.log(d); // { "name" : "john" }
c.name = "doe";
console.log(c); // { "name" : "doe" }
console.log(d); // { "name" : "doe" }
c
に割り当て、メモリ(0x012)を指しますd=c
、このステップではdは同じ場所(0x012)を指します。特別な場合、参照渡し(オブジェクト)
c = {"name" : "jane"};
console.log(c); // { "name" : "jane" }
console.log(d); // { "name" : "doe" }
=
)演算子は、新しいメモリ空間またはアドレスを設定します