好吧,我不知道如何短语标题为这个问题。
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函数不捕获变量的当前值。