をパラメータとして:javascriptオブジェクトのプロパティJavaScriptでオブジェクトのプロパティを参照なぜこのdoesntの仕事で渡された場合は
var myObj={a:1}
function myFun(x){
x.a=2;
}
myFun(myObj);
// this works myObj.a is 2
をパラメータとして:javascriptオブジェクトのプロパティJavaScriptでオブジェクトのプロパティを参照なぜこのdoesntの仕事で渡された場合は
var myObj={a:1}
function myFun(x){
x.a=2;
}
myFun(myObj);
// this works myObj.a is 2
プリミティブ値は値で渡されませんし。オブジェクトは参照渡しされます。
オブジェクトのプロパティは、データ型に基づいて渡されます。
整数を渡しています - x
は値1を表します。x
に値2を代入すると元のオブジェクトは参照されません。
あなたが渡すプロパティが配列であるとしましょう。私が呼び出す2番目の関数は配列を受け取り、その配列に変更を加えます。オブジェクトのプロパティには、変更した配列への参照が含まれているため、変更はオブジェクトに反映されます。あなたは技術的にオブジェクトを全く修正していませんでした...オブジェクトで参照されている配列を変更しました。オブジェクトプロパティを関数に渡すと、オブジェクトに属していることをまったく意識しません。
はあなたに似た、例を参照してください:
var myObj={a:[1]}
function fn1(x){
x=2; //Overwrites x in this scope to the new primitive 2.
//This isn't reflected in myObj because x is not a
//reference to myObj.a it is a reference to the array
//that myObj.a contains (the [1]).
}
function fn2(x){
x.push(2);
}
fn1(myObj.a); //myObj.a is [1]
fn2(myObj.a); //myObj.a is [1,2]
あなたの最初の例のdoesn:あなたがこれを行う場合
var myObj={a:1}
function myFun(x){
x=2;
}
myFun(myObj.a);
// value myObj.a is still 1
反面オブジェクトのプロパティはではなくであるため、参照渡しされます(プロパティ自体もオブジェクトでない限り)。
オブジェクトは、気づいた通り、はです。これは、2番目の例が動作する理由です。
基本データ型を渡すと、値によって渡されます。それは整数のため、パラメータの値を渡して、そのコピーをローカルスコープで作成します。しかし、オブジェクトは参照によって渡されるので、関数は変数にアクセスできます。あなたは、参照することにより、それを渡すことができますが、その簡単に
Obj.a=fun(Obj.a);