2016-09-28 3 views
1

これは非常に基本的な質問ですが、何らかの理由で私は苦労しており、それに対する良い参照を見つけることができません。関数に渡される文字列オブジェクトにどのように影響するか

は、私がWSHの下で実行されているこのJScriptコードを持って言う:

function func(myStr) { 
    var res = "abc"; 
    myStr = res; 
} 

function main() { 
    var myStr = new String(); 

    WScript.Echo(myStr); 
    func(myStr); 
    WScript.Echo(myStr); 
} 

main(); 

私はfuncStringオブジェクトを渡すとfuncは、オブジェクトの値を設定することを期待しています。ただしfuncoperator =を使用してコンテンツをコピーしますが、新しい参照を生成します

この投稿を閲覧したところ、How do I correctly clone a JavaScript object?、探しているものが見つかりませんでした。

私たちにはこれに対する簡単で簡単な解決策がありますか?

+0

JavaScriptはオブジェクトポインタのかなりあいまいな考えを持っているので、参照プログラミングによって呼び出しは、私が強調して、コードを更新しました – K3v1n

+0

非常に複雑であるオブジェクト'myStr'はグローバルではなく、' func'でそのように扱うことはできません – idanshmu

+0

@ K3v1nそれはあなたがそのように働かなければならないほど変です。私はC++の開発者です。このユースケースは一般的なものです。 'myStr'が型オブジェクトまたは配列であって、問題でなかった場合。 – idanshmu

答えて

1

主なものは次のとおりです。オブジェクトは参照によって渡されます。文字列、配列、数値などの他のものは、値渡しされます。

文字列を関数に渡すたびに、その値のコピーがその関数に渡されます(文字列オブジェクトをオブジェクトと見なさないので、クローンについては問いません)。しかし、元の変数へのリンクはすべて失われます。

オブジェクトは、関数に渡すと、オブジェクトのアドレス(ポインタ/参照)が関数に渡されるため、内部と同じ変数になります。関数内でそのオブジェクトに起こることは、外部のオブジェクトにも影響します(同様に)。

は今、同様のコードを見てみたが、通過して

var myObject = {}; 
myObject.txt = 'Foo'; 
console.log(myObject.txt); 
func(myObject); 
console.log(myObject.txt); 

function func(obj) { 
    obj.txt = 'Hello World'; 
} 
1

あなたはfunc必要が値を返すように更新される

var myStr = new String(); 
    myStr = func(); 

return res

か、使用できオブジェクトのように、この2つの方法funcから値を返す

を行うことができますしかし、あなたは何かを変更する必要があります

function func(myStr) { 
    var res = "abc"; 
    myStr.value = res; 
} 

function main() { 
    var myStr = {}; 

    WScript.Echo(myStr.value); 
    func(myStr); 
    WScript.Echo(myStr.value); 
} 

main(); 

このように、myStrはそのオブジェクトへの参照です。私はJSオブジェクトを読むことをお勧めします。

いくつかの参照:
http://eloquentjavascript.net/06_object.html
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

関連する問題