好吧,我不知道如何表达这个问题的标题。
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"
我知道该变量是在's 范围内itemBox
定义的。openDir
但是由于指出的行在 lambda 函数中,不应该itemBox
捕获itemBox
父范围引用的对象,而不是突变为它引用的最后一个对象吗?
说得清楚一点,我希望每个点击处理程序都能自行itemBox
执行addClass "selected"
。但是发生的情况是,itemBox
在每个点击处理程序中总是引用最后一个 itemBox。
我可以通过更改 itemBox 的声明位置来轻松解决此问题。即改变
for item in data.contents
进入
data.contents.forEach (item) ->
但我想知道为什么 lambda 函数不捕获变量当前值。