爲了您的方便,here's an interactive jsfiddle version of my code.這裏是有問題的代碼:在一個循環中,我添加了一個標籤來提醒循環索引計數。爲什麼它總是提醒循環的最後一個索引?
for i in [1, 2, 3, 4, 5, 6, 7, 8]
console.log "cell #{i} was created!"
cell = $('<div class="inventory-cell"></div>').mousedown (event) ->
alert "#{i} was clicked!"
$("#inventory-grid").append(cell)
而這裏的HTML:
<div id="inventory-dialog" class="dialog">
<div id="inventory-grid"></div>
</div>
這裏是它如何工作。這將在循環中生成一堆單元格。如果我點擊第一個,我希望它提醒,「1被點擊!」當我點擊最後一個時,我想讓它說,「8被點擊!」但由於某種原因,每一個我點擊說,「8被點擊」。這是爲什麼發生?
你需要讀入javascript的閉包和變量引用,我在執行時的值是8,如果你能夠點擊hypersonically快速,你會得到一個值在1-8之間的取決於哪個迭代你的外部循環創建閉包在 – Bryan
我認爲這是@BryanMoyles正在談論的一個很好的鏈接。不幸的是,它不是專門幫助我解決問題,但瞭解這些信息非常重要:http://stackoverflow.com/questions/111102/how-do-javascript-closures-work –
這對您的問題更具體:http:/ /stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – bfavaretto