Объем закрытия не зафиксирован? - 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) ->

Но я хотел бы знать, почему лямбда-функция не фиксирует текущее значение переменных.

Ответы на вопрос(1)

Ваш ответ на вопрос