2012-04-03 56 views
0

我在javascript中有兩個數組sd [16] [16]和gd [16] [16]。我需要比較數組的值。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」作爲全局變量初始化。 – 2012-04-03 14:16:27

回答

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 2012-04-03 14:51:20

+0

不確定括號裏有什麼'']'?你指的是。也許你的意思是後面的括號'()'?在最後一行。這些都是你剛剛定義的匿名函數會調用它自己,並用'getScore:'和'updateScore:'返回對象。 – Clay 2012-04-28 22:20:35

0

您忘記初始化分數變量。現在,您遇到了問題,您的分數僅在changeColor函數中可用。您可以定義一個分數變量的所有功能之外,因此,它是隨處可見:

 

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

我已經在外面初始化了分數,但是它給出了一個問題。 – amrita 2012-04-03 14:19:59

+0

究竟是什麼問題? – 2012-04-03 14:21:23

+0

點擊「點擊看分數」按鈕,得分不會顯示。 – amrita 2012-04-03 14:23:52