2017-07-29 11 views
-2
var currDice, totDice, dice, complete; 

function moveIt(){ 
    dice = Math.floor(Math.random()*6) + 1, 
    currDice = 40, 
    totDice = totDice+complete, 
    complete = dice * currDice 
    return totDice; 
}; 

moveItNaNを返します。JavaScriptでNaNおよびUndefinedを返す

ランダムに6つまで40の倍数を返し、以前の値を保持する必要があります。

削除するとUndefinedが返されます。

私はそれが範囲の問題であることを知っています。助けてください。

+1

「完了」はどこで初期化しましたか?下の3行はあなたの問題に関係していますか?変数を 'var'、' let'または 'const'で宣言する必要があります。 – trincot

+1

コードと何をしようとしているのかをもっと明確にする必要があります。どこから 'moveIt'関数を呼び出していますか? –

+2

*この関数 'moveit'は' NaN'を返します。* No、置き換えられた 'var'キーワードのために解析さえしないので何も返しません。 –

答えて

0

初期化する前にcompleteを使用しています。

function moveIt(beforeTotal) { 
    var dice = Math.floor(Math.random()*6) + 1; 
    var currDice = 40; 
    var complete = dice * currDice; 
    var totDice = (beforeTotal || 0)+complete; 
    return totDice; 
}; 

var total = moveIt(); 
console.log(total); 
total = moveIt(total); 
console.log(total); 

この方法がどのように機能するかを指摘しようとします。

この機能は、初期値なしで呼び出すことができます。 (beforeTotal || 0)(undefined || 0)で、0と評価されます。これはJSロジックです.1つのサイコロの結果が得られます。

この関数に値を渡すと、それにcompleteを追加するために使用されます。 1000を渡すとcompleteが120を取得すると、1120を取得します。

他のすべての変数は、この関数でのみ使用できます。

+0

totDiceも初期状態では未定義ですので、そのままNaNにキャストします – silicakes

+0

@silicakes私はamature plzですwud uは何を説明しますか?beforeTotalは何ですか? – shashank

+0

基本的には、インクリメントの初期値を渡し、その参照を保持してからインクリメントされた値などを渡します。 @ Caesar2011は彼の答えだから説明しておきます。 – silicakes

0

で初期状態totDIceは未定義であり、あなたが何かに未定義追加するとき、あなたはNaN

function moveIt(){ 

    //memoizing the mutable value as key of the function itself 
    moveIt.totDice = moveIt.totDice || 0; 

    // you might wanna wrap it with parseInt()/Math.floor()/Math.ceil() 
    var dice = Math.floor(Math.random()*6) + 1; 
    var currDice = 40; 
    var complete = dice * currDice; 
    var totDice = totDice+complete; 
    return moveIt.totDice ; 
}; 
0

var totDice;にキャスト値はundefinedを持つことになりますし、あなたが最初の行に割り当てtotDice = 0NaN

を得る理由です取得...

completeにはnがありますので、上記のcomplete = dice * currDice行も移動してください値はまだ

var currDice, totDice = 0, dice, complete; 
    function moveIt(){ 
    dice = Math.floor(Math.random()*6) + 1, 
    currDice = 40, 
    complete = dice * currDice, 
    totDice = totDice+complete 

    return totDice; 
    }; 
0

ブラウザの統合コンソールを使用することができます。

Chromeの場合:ツール> Javascript Console。またはCTRL + SHIFT + Jでコードからconsole.logを見ることができます。また、パネルの上部にある[Sources]タブを使用することもできます。ファイルに移動してそれをクリックすると、行番号をクリックして、必要な行にブレークポイントを置くことができます。

Firefoxの場合:ツール>開発> Webコンソール。またはCTRL + SHIFT + K. Yuは前述と同様の方法でデバッグできます。

また、Firebugのようなツールを使用することもできます。 https://getfirebug.com/wiki/index.php/Script_Debugging

関連する問題