2016-10-25 12 views
0

を経由して関数内のグローバル変数を変更することは例です:ここパラメータ

let wish = 'Happy birthday!'; 
 

 
function translate(msg) { 
 
    msg = 'Alles Gute zum Geburtstag!'; 
 
} 
 

 
translate(wish); 
 
console.log(wish);

私はJavaScriptを「渡し「値渡し」とされていないので、それはwishを変更しないであろうことを実現します関数に値を渡すことによって、その変数(関数の外にある)をどのように変更することができますか? wishをプリミティブではなく文字列を保持するオブジェクトまたは配列に変更する必要はありませんか?

+0

グローバルVARSが眉をひそめているので、おそらく行くには最高の方法ですが、あなたはVARS、あなたの答え厳密解でそれをしたい場合は私の答えです。 – wordSmith

+1

'eval'は動作しますが、実際は解決策ではありません。 – Bergi

答えて

1

グローバル変数の代わりにオブジェクトを使用します。オブジェクトの設定

let wish = { 
 
    msg: 'Happy birthday!' 
 
}; 
 

 
function translate(obj) { 
 
    obj.msg = 'Alles Gute zum Geburtstag!'; 
 
} 
 

 
translate(wish); 
 
console.log(wish.msg);

+0

私はプリミティブとして「希望」とそれをすることはできませんか? – jsejcksn

+0

いいえ、他の方法では値を設定するために関数を使用するだけですが、それはオブジェクトよりも悪くなります。 '翻訳する(function(newMsg){wish = newMsg;})' –

+0

あなたの「いいえ」をサポートするいくつかのドキュメントにリンクできますか? – jsejcksn

-1
let wish = 'Happy birthday!'; 

function translate(msg) { 
    msg = 'Alles Gute zum Geburtstag!'; 
    return wish=msg; 
} 

translate(wish); 
console.log(wish); //Alles Gute zum Geburtstag! 

返り値を使用する必要はありませんが、より小さいスコープで同じ名前のvarが存在しない場所では、グローバル変数をフォームに設定できます。

+0

私は関数内の変数を静的に参照できることを認識していますが、それは関数の目的を破ります。 – jsejcksn

+0

@jsejcksn関数のポイントは、より多くのサイクルを犠牲にしてより少ないメモリを使用することです。したがって、関数を複数回使用する限り、関数の目的を無効にすることはありません。一度しか使用していない場合は、関数を使用しないでください。 – wordSmith

+0

私の質問の文言ははっきりしないかもしれないと思います。私はもう少しそれについて考えるでしょう。 – jsejcksn

関連する問題