2012-04-03 5 views
0

私は2つの配列sd [16] [16]とgd [16] [16]をjavascriptに持っています。私は配列の値を比較する必要があります。javascriptの変数

var score=0; 
document.write("<table>"); 
for(c1=0; c1<16; c1++) 
{ document.write("<tr>"); 
    for(c2=0; c2<16; c2++) 
     document.write("<td onClick='changeColor(this);'>" + gd[c1][c2] + "</td>"); 
    document.write("</tr>"); 
} 
document.write("</table>"); 

function changeColor(tdd) 
{ 
    if(tdd.bgColor=='white') 
    { 
     tdd.bgColor='red'; 
     if (gd[c1][c2] == sd[c1][c2]) 
      score+=5; 
     else 
      score-=2; 
    } 
    else 
    { 
     tdd.bgColor='white'; 
    } 
} 

ただし、後でスコアを表示しようとすると、スコアは表示されません。

function scc() 
{ 
    document.getElementById('scf').innerHTML = score; 
} 
</script> 
<br><br><center><button type='button' onclick='scc()'> Click to see current score</button> <p id="scf">0</p> </center> 
<br><br> <center><input type="submit" value="Get Solution"/></center> 

私が間違っていることを教えてもらえますか?

+1

"score"は、関数の外部にあるグローバル変数として必ず初期化してください。 –

答えて

0

それはもう少し作業だが、あなたは孤立スコア変数を維持するためにクロージャを使用することができます。それはどこでも利用できるようにするには、すべての関数の外にスコア変数を定義することができます。

var score = (function() { 
    var currentScore = 0; 
    return { 
     getScore: function() { return currentScore; }, 
     updateScore: function(change) { currentScore += change; } 
    } 
})() 

、その後、あなたが得る/このようにスコアを設定することができます:あなたが誤ってあなたのスコアを踏んで心配する必要はありませんscore.getScore();score.updateScore(5); score.updateScore(-4)

この方法です。

+0

関数の後に、最後に余分な括弧を入れたり、必要なものがあるようですか? – amrita

+0

'[]'のかっこはわかりませんか?あなたは参考にしています。おそらく末尾のかっこ '()'を意味するのでしょうか?最後の行にそれらは、あなたが定義した無名関数がそれ自身を呼び出し、 'getScore:'と 'updateScore:'でオブジェクトを返すようになっています。 – Clay

0

スコア変数を初期化するのを忘れてしまった。これで、あなたのスコアはchangeColor関数でのみ使用できるという問題がありました。

 

<script type="text/javascript"> 
var score = 0; 
document.write ... 
</script> 
 
+0

私はすでにスコアを外部に初期化していましたが、問題が生じています。 – amrita

+0

そしてどのような問題がありますか? –

+0

スコアをクリックしてクリックするとスコアが表示されません。 – amrita