2017-03-15 15 views
2

なぜ以下の質問で出力に差異が生じるのですか?関数内で空のオブジェクトを参照として渡す

Q1

function foo(x){ 
    x.x=20; 
} 

var abc= {}; 

foo(abc); 

console.log(abc);// prints an object with x=20 

Q2

function foo(x){ 
    x={ 
     y:10 
     }; 

} 


var abc= {}; 

foo(abc); 

console.log(abc);// prints an empty object 

両者の違いは何、なぜそれが第二の場合には、空のオブジェクトを印刷ありません。

+1

を理解するcommeted行を読みます'。 –

+0

関数パラメータ( 'x')を新しい値で上書きしても、関数外の世界には影響しません。あなたは一般的にそうすることを避けるためにポイントを作るべきです。 – JLRishe

答えて

3

Q1には、fooが参照を保持しているため、変更がどこにも反映されています。

しかし、Q2では、以前の参照を削除し、新しい参照を割り当てた渡された変数を再初期化しました。

だからこそQ2が空になります。そして、abcは空のオブジェクトでしたが、メソッドに渡すとそれは変更されませんでした。

+0

ありがとうanik私は私の答えを得た – user2735203

+0

@ user2735203この回答を受け入れることを忘れないでください:) –

1

'X'と `abc`がdifferent.`abc`参照されていないれる` X秒場合

Q1

function foo(x){ 
    x.x=20; 
} 

var abc= {}; 

foo(abc); //foo set abc.x=20 

console.log(abc); 

Q2

function foo(x){ 
    x={ 
     y:10 
     }; 

} 


var abc= {}; 

foo(abc); //foo create a new object and assign it in x. So abc hold by x is overriden 

console.log(abc); 
+0

ありがとうSagar私は私の答えを得た – user2735203

関連する問題