Объем закрытия не зафиксирован? - 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
здесь. Но так как указанная строка находится в лямбда-функции, не следуетitemBox
захватить объект, на который ссылаетсяitemBox
родительской области вместо того, чтобы быть видоизмененным до последнего объекта, на который она ссылается?
Проще говоря, я ожидаю, что обработчик кликов каждогоitemBox
выполнятьaddClass "selected"
к себе. Но что происходит, так этоitemBox
в каждом из обработчиков кликов всегда ссылаются на последний itemBox.
Я могу легко это исправить, изменив, где itemBox объявлен. то есть изменение
for item in data.contents
в
data.contents.forEach (item) ->
Но я хотел бы знать, почему лямбда-функция не фиксирует текущее значение переменных.