好吧,我不知道如何爲這個問題標題。未收集關閉範圍? - Coffeescript
openDir = (path) ->
socket.emit "get_metadata", path, (data) ->
columnBox = $ "<div/>", class: "columnbox"
for item in data.contents
itemBox = $ "<div/>", class: "itembox"
itemBox.click ->
columnBox_inner.children().removeClass "selected"
itemBox.addClass "selected" # <<<--- Over here
openDir item.path
columnBox.append itemBox
columnBox.appendTo "#columnscontainer"
據我所知,可變itemBox
下openDir
的範圍在此定義。但是由於指出的行是在lambda函數中,因此不應該在itemBox
那裏捕獲父範圍的itemBox
引用的對象,而不是突變到它引用的最後一個對象?
說得很清楚,我希望每個itemBox
的點擊處理程序自己執行addClass "selected"
。但是會發生什麼情況是每個點擊處理程序中的itemBox
始終引用最後一個itemBox。
我可以通過更改itemBox被聲明的位置來輕鬆解決此問題。即改變
for item in data.contents
到
data.contents.forEach (item) ->
但我想知道爲什麼lambda函數不捕獲變量的當前值。
該問題也適用於'openDir item.path'行中引用的'item'變量,因爲即使在'openDir'範圍內定義了該變量。 – 2012-08-16 22:44:18