2016-07-21 12 views
0

私はJavaScriptのトークを見ていましたが、関数内でオブジェクトのプロパティを渡すと実際には実際の値が変更されます参照により。ここにスライドがあります: enter image description hereJavaScriptで参照渡しされる変数を変更する

私はコンセプトを練習しようとしたとき、そうではありませんでした。私が間違ってここに何を教え、そして私が間違っているなら、私を修正してください10. に変更することがobj.val期待していた

var obj = {val: 5}; 
function changeVal(x) { 
x = x+5; 
return x; 
} 
console.log(obj.val) // 5 
console.log(changeVal(obj.val)) // 10 
console.log(obj.val) // 5 

:ここに私のコードです。おかげ

+0

答えを読む:http://stackoverflow.com/a/13104500/812519このトピックに関する多くの回答とコメントがありますが、 – anvk

+0

ですが、オブジェクトを渡すことはありません。 – dandavis

+0

'call by value '、'参照による呼び出し '、'共有による呼び出し 'などがあります。 Javascriptでは、最初の(プリミティブの場合)、最後の(オブジェクトの場合)評価方法が使用されます。特に、渡されたオブジェクトの再割り当て時に 'by reference'と' by sharing'の違いに注目してください。 – ftor

答えて

1

あなたはないオブジェクトが、プリミティブ型を渡しています。したがって、objvalを渡すと、それは数字であり、プリミティブ型です。をコピーし、コピーをオブジェクトに渡します。

あなたはこのように渡すと、それは、あなたが関数内の値のいずれかを変更した場合を意味し、不変である

var obj = {val: 5}; 

function changeVal(param) { 
param.val = param.val + 5; 
return param.val ; 
} 
console.log(obj.val) // 5 
console.log(changeVal(obj)) // 10 
console.log(obj.val) // 10 
+0

aw04はあなたと同意@あなたが – aw04

+0

異なるパラメータの何かに名前を付ける場合などは、もう少し明確になります –

0

プリミティブ型(文字列、整数、ブール値、など...)に動作します呼び出し先(関数を呼び出すスコープ)は変更を認識しません。

function doSomething(a) { 
    a = a + 1; 
} 
var value = 2; 
console.log(value); // result: 2 
doSomething(value); 
console.log(value); // result: 2 

参照渡しはオブジェクトに対してのみ機能します。 Javascriptの種類について

function doSomething(obj) { 
    obj.attribute = obj.attribute + 1; 
} 
var myObject = {attribute: 2}; 
console.log(myObject.attribute); // result: 2 
doSomething(myObject); 
console.log(myObject.attribute); // result: 3 

もっと読み:このよう https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures

1

あなたは実際には(val)でプロパティの値を渡し、オブジェクトを渡していません。 changeVal()にobjを渡すと、実際に渡されたオブジェクトのプロパティの値が変更されます。そのために

あなたは次のように実行する必要があります。

例えば
var obj = {val: 5}; 
function changeVal(x) 
{ 
    x = x+5; 
    return x; 
} 
console.log(obj.val); // 5 
changeVal(obj); // Need to pass object instead of value of the property's value 
console.log(obj.val); // 10 

0

言って、あなたは、iPhoneを持っています。今、製造会社があなたに電話をかけて、リファレンスのためにあなたのiPhoneを借りるように頼んで、似たようなアイフォンをデザインして顧客に販売できるようにしましょう。あなたの元のIphoneはまだ存在していません。しかし、今のところ、工場は参照のためにそれを使用する必要があります。ちょうどobjのコピーを作る工場としてあなたの機能を考えてください。

//Original data 

var obj = {val: 5}; 

あなたの関数が何かを返したら、それは技術的に価値

例次のようになります。

return 3; is a value of 3 

ので

function changeVal(x) { 
x = x+5; 
return x; 
} 

は、この中のxの新しい値ですcaseはx + 5になります。

xはあなたが関数に渡すものは何でものコピーです。

これが役に立ちます。

関連する問題