2016-04-25 10 views
0

としてオブジェクトを渡すときにこんにちは、私はSkyrimの関数内で、次のJavaScriptコードJavaScript関数のスコープパラメータ

var skyrimCity = function(object) { 
    object = { 
     'world': 'whiterun' 
    }; 
    }, 
    skyrim = function(object) { 
    object.world = 'skyrim'; 
    }, 

    elderScrolls = { 
    'world': 'tamriel' 
    }; 
console.log(elderScrolls); // printed value ? -> {world: "tamriel"} 

skyrimCity(elderScrolls); 
console.log(elderScrolls); // printed value ? -> {world: "tamriel"} 

skyrim(elderScrolls); 
console.log(elderScrolls); // printed value ? -> {world: "skyrim"} 

を持っている私は、世界の値を変更しますが、私は、同様の機能の外にそれを見ることができます。私はこの変更の範囲がなぜ機能の外側に広がったのか疑問に思っていますか? javascript関数の中のオブジェクトを渡すことは、常に元のオブジェクト自体への参照として渡されていますか?

+2

配列、関数、オブジェクトは、すべてJSで参照渡しされます。 –

+2

*「javascript関数内のオブジェクトを渡すのは、元のオブジェクト自体の参照として常に渡されていますか?」*はい、他の一般的な言語(Java、PHP、Python)でも同様です。 –

+0

はペダンティクになるため、オブジェクトはJSの "byValue"に渡されます。値はオブジェクトに対する参照です... – dandavis

答えて

3

javascript関数内のオブジェクトを渡すことは、常に元のオブジェクト自体への参照として渡されていますか?

はい、かなりです。 JavaScriptでは、プリミティブ型(数値、ブール値、文字列)でないものは参照型です。オブジェクトを関数に渡すと、元のオブジェクトへの参照が渡されます。そのオブジェクトが関数内で変更された場合、元のオブジェクトは変更されます。

つまり、これは変数スコープとは関係なく、変数が実際に参照しているものとは関係ありません。