2016-12-04 15 views
0

ここに最初に投稿すると、非常に基本的なJavaScriptに関する質問が出ます。私のWebページでJScript - 関数間の変数へのアクセス

var decklist = []; 

function CreateDeck() { 
    var deckform = document.getElementById("txtar_decklist").value.split('\n'); 
    var stats = []; 
    for (var n = 0; n < deckform.length; n++){ 
     if (deckform[n] != ""){ 
      stats = deckform[n].split(','); 
      for (var x = 0; x < parseInt(stats[0],10); x++){ 
       decklist.push({Name:  stats[1], 
           Color: stats[2], 
           Type:  stats[3], 
           Subtype: stats[4], 
           Level: stats[5], 
           Attack: stats[6], 
           Defense: stats[7], 
           Drawn: false}); 
      } 
     } 
    } 
}; 

function DrawCard() { 
    var randomcard = 0; 
    var carddrawn = false; 
    while (carddrawn == false){ 
     randomcard = (Math.floor(Math.random() * decklist.length + 1)) - 1; 
     if (decklist[randomcard].Drawn == false){ 
      alert(JSON.stringify(decklist[randomcard])); 
      decklist[randomcard].Drawn = true; 
      carddrawn = true; 
     } 
    } 
}; 

、ユーザーはデッキリストを挿入し、オブジェクトの配列は、各カードの統計情報/フィールドを格納するために作成されています。私は、次のコードを持っています。 .Drawn = falseというプロパティを持つカードを "描画"しようとすると、そのプロパティに真の値を即座に割り当てて、同じカードを再び描画しないようにする2番目のボタンがあります。

私は変数をこれらの2つの機能の間で「共有」する方法を理解できないようです。上に示したようにグローバル変数宣言であると思ったことを試した上で、疑似グローバルな使用のためのモジュールを作成しようとしました。私が間違っていることを誰かに見せてもらえませんか?

私の変数宣言が実際にうまくいき、問題が2番目の関数にある場合は、私に知らせてください。

私の背景はVB.Net(VBScript + VBA)とSQLにあります。大学で非常に基本的なJavaScriptとHTMLクラスを取ったことがありますが、クラスが終わったら十分に追求していないので、私が学んだことの多くを保持できませんでした。

本当に助けていただきありがとうございます。

+1

関数の構成を使用せず、 'drawCard(createDeck(deckForm))'のように引数を渡すのはなぜですか? – elclanrs

+0

現在はグローバル変数なので、関数間で共有されます。あなたは何が問題なのか教えていただけますか? – Rajesh

+0

これは、フォームのボタンから呼び出された最初の関数と何か関係がありますか? – TylerG

答えて

0

音がスコープの問題のようです。 requireを使用していて、各関数がそれ自身のファイルに存在する場合、またはdecklist変数がrequireを使用する他の関数によってアクセスされている場合、desklist varは有効範囲外になります。デッキリストは、ページ上のものからアクセス可能であることを確認してくださいだろうと

window.decklist = []; 

一つの解決策は、ウィンドウとしてスコープにデッキリストを設定するかもしれません。 window.decklistを使うために関数内のdecklistへの参照を変更する必要があるかもしれないことに注意してください。

+0

これは、関数の外にあるので、既にウィンドウの一部です。 – Rajesh

+0

モジュールを使用しているので、私はここで仮定します。 – bob

+0

ポイントはモジュール内にラップされていても機能しますが、それでも両方の機能で共有可能です – Rajesh

関連する問題