2017-10-28 11 views
2

私は、単純なネイティブJSアプリケーションが動作しているようです書いていますが、私は私のブラウザでdebugerを通じてenter image description hereJS変数の参照エラー

をステッピングされている間、私はそれは私のvar idが定義されていないと言う面白いことに気づきましたか?私は私がコンソールでこれを見ることが期待されることを意味するものを理解するが、デバッガでは?

var playerScore = [0,0]; 
var player = 0; 
var score = 0; 
var troll = 0; 

function rollDice() { 
    var dice = 0; 
    dice = Math.floor((Math.random() * 6) + 1); 
    return dice; 
} 

function playerTurn() { 
    player === 0 ? player = 1 : player = 0; 
    // score = 0; 
} 

function turnScore() { 
    rollDice() !== 1 ? score += rollDice() : playerTurn(); 
    return score; 
} 

function gameScore() { 
    troll = playerScore[player] += turnScore(); 
    return troll 
} 

document.getElementById('rollDice').addEventListener('click', function() { 
    document.getElementById('round-score-' + player).innerHTML = turnScore(); 
}); 
document.getElementById('saveScore').addEventListener('click', function() { 
    document.getElementById('score-' + player).innerHTML = gameScore(); 
}); 
document.getElementById('newGame').addEventListener('click', function() { 
    document.getElementById('score-0').textContent = '0'; 
    document.getElementById('score-1').textContent = '0'; 
    document.getElementById('round-score-0').textContent = '0'; 
    document.getElementById('round-score-1').textContent = '0'; 
}); 

あなたはサイコロを宣言し、初期化しないこと)(rollDiceを呼び出さない場合は、誰かがTHX

+1

現在のデバッグポインタは、 'rollDice()'のローカル変数であるため、サイコロがスコープ外にある別の関数内にあります。私はこれがあなたがメッセージを見ている理由だと思います。 – Vasan

+0

owww ok私のデバッガはこの関数 'turnScore()'で停止していますので、 'var dice'はそこでは宣言されていませんが' rollDice() 'にありますが、私はこの変数をrollDice関数としてi私は関数の戻り値が必要です。そのエラーのように私は無視することができますが、同時に何が最善のアプローチであるか疑問に思っています – John

+0

しかし、あなたは1つの関数の中で 'troll'も使用しています。これがあなたのコードをフォーマットする方法であれば、私は他の変数として最初に 'dice'を宣言することをお勧めします。それ以外の場合は、すべてのもののコンストラクタ(またはクラス)を作成し、変数をプロパティとして持ち、メソッドとして機能させることをお勧めします。 – b00t

答えて

0

を何が起こっているのかを説明することができます。 rollDice()関数を呼び出すと、その範囲外からダイスを呼び出すことができます。ダイスはrollDice()関数内でしかアクセスできないローカル変数です。戻り値を得るには、次のようにしてください。

var anotherVariable = rollDice ;