2017-12-15 13 views
1

私は実際の変数を渡そうとしているクロージャー関数を持っていますし、クロージャー関数の中で何かをした後、クロージャー関数の結果を渡した変数に代入して欲しい関数。クロージャーの中に変数を代入する

この例を見ると、私は馬鹿げたように聞こえるかもしれません。

var foo,bar,foobar; 

    loadAsset(foo,'../assets/sounds/gameOverSound1_.mp3'); 
    loadAsset(bar,'../assets/sounds/gameOverSound2_.mp3'); 
    loadAsset(foobar,'../assets/sounds/gameOverSound3_.mp3'); 



    function loadAsset(varsName,cAsset){ 

     loadSound(cAsset,loadedAsset); 

     function loadedAsset(loadingAssetFile){ 
       loadingCount++; 
       varsName = loadingAssetFile; 
      } 

    } 

だから基本的に私はどのように私はこれを達成することができFOO =「どんな結果がloadingAssetFileである」、バー=「どんな結果がloadingAssetFileである」などなど

を達成する必要がありますか?

注:私は音とloadSoundをロードするためにp5.jsというライブラリを使用していますが渡されたサウンドをロードし、ロードされた音の値を返すライブラリの一部です。

答えて

2

fooを渡すと、値がコピーされて関数に渡されます。関数内では、変更は外部変数fooには影響しません。必要な結果を得るには、オブジェクトのような参照型を渡す必要があります。

変更するプロパティとプロパティ名を含むオブジェクトを渡すことができます。

var obj = { 
    foo: '', 
    bar: '', 
    foobar; 
} 

loadAsset(obj, 'foo', '../assets/sounds/gameOverSound1_.mp3'); 
loadAsset(obj, 'bar', '../assets/sounds/gameOverSound2_.mp3'); 
loadAsset(obj, 'foobar', '../assets/sounds/gameOverSound3_.mp3'); 

function loadAsset(object, varsName, cAsset){ 

    loadSound(cAsset, loadedAsset); 

    function loadedAsset(loadingAssetFile){ 
     loadingCount++; 
     object[varsName] = loadingAssetFile; 
    } 

} 
+0

私はこれを試してみて、あなたに戻って取得してみましょう。 – Rehan

+0

今日は何か新しいものを出してください、あなたの答えは大変ありがとう!どのようにしてやるべきか理解できるように助けます。 – Rehan

1

編集:オブジェクトを使用してのSuren's answerは、おそらく配列を使用するよりも優れている、私は別のアプローチを示し、パラメータの再割り当てについてをより詳細に説明したかったです。

パラメータを再割り当てしても、渡された値の値は変更されません。

代わりに、このために配列を使用できます。ような何か:

var assets = []; 

loadAsset(0, '../assets/sounds/gameOverSound1_.mp3'); 
loadAsset(1, '../assets/sounds/gameOverSound2_.mp3'); 
loadAsset(2,'../assets/sounds/gameOverSound3_.mp3'); 

function loadAsset(index, cAsset){ 

    loadSound(cAsset,loadedAsset); 

    function loadedAsset(loadingAssetFile){ 
     assets[index] = loadingAssetFile; 
    } 
} 

とJavaScriptを使用して、インデックス(みかん...)として文字列を使用することを可能にするので、あなたはこのような何かを行うことができます:

var assets = []; 

loadAsset('foo', '../assets/sounds/gameOverSound1_.mp3'); 
loadAsset('bar', '../assets/sounds/gameOverSound2_.mp3'); 
loadAsset('foobar','../assets/sounds/gameOverSound3_.mp3'); 

function loadAsset(index, cAsset){ 

    loadSound(cAsset,loadedAsset); 

    function loadedAsset(loadingAssetFile){ 
     assets[index] = loadingAssetFile; 
    } 
} 
+1

あなたの答えをよろしくお願いします。 – Rehan

関連する問題