Обратные вызовы видят только последнее значение из цикла - PullRequest
4 голосов
/ 22 ноября 2011

У меня есть этот код:

for food in foods
  Person.eat ->
    console.log food

Проблема в том, что «еда» всегда будет последней «едой» в «еде». Это потому, что у меня есть console.log в функции обратного вызова.

Как сохранить значение в текущей итерации?

1 Ответ

10 голосов
/ 22 ноября 2011

Вам нужно закрыть значение цикла, если вы хотите генерировать функции для запуска позже.Вот для чего кофе предоставляет ключевое слово do.

for food in foods
  do (food) ->
    Person.eat ->
      console.log food

См. Этот пример: https://gist.github.com/c8329fdec424de9c57ca

Это происходит потому, что ваше тело цикла имеет ссылку на переменную food, которая изменяетсязначения каждый раз, когда выполняется цикл, и когда вы выполняете функцию if, находит замыкание, в котором была создана функция, и находит переменную food, установленную на последнее значение массива.Использование другой функции для создания новой области решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...