我會很快,並直接跳到案件。代碼被評論,所以你知道我的意圖。基本上,我正在構建一個基於HTML5的小型遊戲,並且反對在服務器或cookie中保存內容,我只是給玩家提供一個關卡代碼。當玩家將代碼(以簡單散列形式)輸入到文本輸入字段中,並單擊按鈕加載該級別時,將調用函數「l」。該函數首先檢索玩家的條目,然後迭代散列列表並對其進行比較。當一場比賽很喜歡,那個水平應該被加載,但是有錯誤。我做了一些調試,發現iterator(「i」)的值在setTimeout內部發生了變化!我想暫停1秒,因爲立即加載關卡會太快而且看起來很糟糕。setTimeout似乎正在改變我的變量!爲什麼?
levelCodes = //Just a set of "hashes" that the player can enter to load a certain level. For now, only "code" matters.
[
{"code": "#tc454", "l": 0},
{"code": "#tc723", "l": 1},
]
var l = function() //This function is called when a button is pressed on the page
{
var toLoad = document.getElementById("lc").value; //This can be "#tc723", for example
for (i = 0; i < levelCodes.length; i++) //levelCodes.length == 2, so this should run 2 times, and in the last time i should be 1
if (levelCodes[i].code == toLoad) //If I put "#tc723" this will be true when i == 1, and this happens
{
console.log(i); //This says 1
setTimeout(function(){console.log(i)}, 1000); //This one says 2!
}
}
不錯的評論,有所有upvotes。 – ninjagecko 2012-03-02 21:13:21
僅供參考,您的代碼不會通過jslint的幾個原因,並會在一些瀏覽器中產生錯誤 – 2012-03-02 21:32:31
@MarkSchultheiss,請解釋一下,我認爲jsLint是某種評估者,是對的嗎?那麼,你能告訴我爲什麼不計算? – corazza 2012-03-02 21:47:41