मैं जल्दी हो जाऊंगा और सीधे मामले में कूद जाऊंगा। कोड पर टिप्पणी की गई है ताकि आप मेरे इरादों को जान सकें। असल में, मैं एक छोटा, HTML5 आधारित गेम बना रहा हूं, और सर्वर पर या कुकी में सामान सहेजने का विरोध करता हूं, मैं केवल खिलाड़ी को एक स्तर कोड प्रदान करूंगा। जब कोई खिलाड़ी कोड इनपुट फ़ील्ड में कोड (एक साधारण हैश के रूप में) में प्रवेश करता है, और उस स्तर को लोड करने के लिए बटन क्लिक करता है, तो फ़ंक्शन "एल" कहा जाता है। वह फ़ंक्शन पहले खिलाड़ी की प्रविष्टियों को पुनर्प्राप्त करता है, फिर हैश की सूची के माध्यम से पुनरावृत्त करता है और उनकी तुलना करता है। जब एक मैच शौकीन होता है, तो उस स्तर को लोड किया जाना चाहिए, लेकिन त्रुटियां थीं। मैंने डीबगिंग का थोड़ा सा किया, और मुझे पता चला कि इटरेटर ("i") का मान सेटटाइमआउट के अंदर बदल गया है! मैं 1 सेकंड रोकना चाहता हूं, क्योंकि स्तर को तुरंत लोड करना बहुत तेज़ होगा और खराब लगेगा।सेटटाइमआउट मेरे चर बदल रहा प्रतीत होता है! क्यूं कर?
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
एफवाईआई, आपका कोड कई कारणों से जेएसलिंट पास नहीं करता है और कुछ ब्राउज़रों में त्रुटियों का उत्पादन करेगा –
@ मार्कस्कुल्थिस, कृपया समझाएं, मुझे लगता है कि जेएसलिंट किसी प्रकार का मूल्यांकनकर्ता है, क्या यह सही है? खैर, क्या आप मुझे बता सकते हैं कि यह गणना क्यों नहीं करती? – corazza