Tôi sẽ nhanh chóng và chuyển thẳng đến vụ án. Mã được nhận xét để bạn biết ý định của tôi. Về cơ bản, tôi đang xây dựng một trò chơi nhỏ dựa trên HTML5 và phản đối việc lưu nội dung trên máy chủ hoặc trong cookie, tôi sẽ chỉ cung cấp cho người chơi một mã cấp. Khi người chơi nhập mã (dưới dạng một băm đơn giản) vào trường nhập văn bản và nhấp vào nút để tải cấp đó, hàm "l" được gọi. Chức năng đó trước tiên truy xuất các mục nhập của người chơi, sau đó lặp qua danh sách các băm và so sánh chúng. Khi một trận đấu phù hợp, mức độ nhất định được cho là được tải, nhưng có lỗi. Tôi đã làm một chút gỡ lỗi, và tôi phát hiện ra rằng giá trị của iterator ("i"), đã thay đổi bên trong một setTimeout! Tôi muốn tạm dừng 1 giây, bởi vì tải mức độ ngay lập tức sẽ chỉ đơn giản là quá nhanh và sẽ trông xấu.setTimeout dường như đang thay đổi các biến của tôi! Tại sao?
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!
}
}
Nhận xét hay, có tất cả các phiếu bầu. – ninjagecko
FYI, mã của bạn không vượt qua jslint vì một vài lý do và sẽ tạo ra lỗi trong một số trình duyệt –
@MarkSchultheiss, vui lòng giải thích, tôi nghĩ rằng jsLint là một loại đánh giá, đúng không? Vậy thì, bạn có thể cho tôi biết tại sao tính toán này không? – corazza