2012-02-16 13 views

答えて

1

プリミティブ値は値で渡されませんし。オブジェクトは参照渡しされます。

オブジェクトのプロパティは、データ型に基づいて渡されます。

整数を渡しています - 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] 
2

あなたの最初の例のdoesn:あなたがこれを行う場合

var myObj={a:1} 

function myFun(x){ 
x=2; 
} 

myFun(myObj.a); 

// value myObj.a is still 1 

反面オブジェクトのプロパティはではなくであるため、参照渡しされます(プロパティ自体もオブジェクトでない限り)。

オブジェクトは、気づいた通り、です。これは、2番目の例が動作する理由です。

0

基本データ型を渡すと、値によって渡されます。それは整数のため、パラメータの値を渡して、そのコピーをローカルスコープで作成します。しかし、オブジェクトは参照によって渡されるので、関数は変数にアクセスできます。あなたは、参照することにより、それを渡すことができますが、その簡単に

Obj.a=fun(Obj.a); 
関連する問題