Coffeescript 回调只查看循环中的最后一个值

Coffeescript 回调只查看循环中的最后一个值,coffeescript,Coffeescript,我有以下代码: for food in foods Person.eat -> console.log food 这里的问题是,“食物”永远是“食物”中的最后一个“食物”。这是因为我在回调函数中有console.log 如何在当前迭代中保留该值?如果要生成稍后运行的函数,则需要关闭循环的值。这是咖啡提供的do关键字 for food in foods do (food) -> Person.eat -> console.log food

我有以下代码:

for food in foods
  Person.eat ->
    console.log food
这里的问题是,“食物”永远是“食物”中的最后一个“食物”。这是因为我在回调函数中有console.log


如何在当前迭代中保留该值?

如果要生成稍后运行的函数,则需要关闭循环的值。这是咖啡提供的
do
关键字

for food in foods
  do (food) ->
    Person.eat ->
      console.log food
请参见此示例:


这是因为循环体引用了
food
变量,该变量每次通过循环时都会更改值,当函数if找到创建函数的闭包时,会发现food变量设置为数组的最后一个值。使用另一个函数创建一个新的作用域可以解决问题。

squegy的答案是正确的。值得一提的是,CoffeeScript用于以这种方式自动保留循环中的值,但该实现导致了其他问题(例如,中断
中断
继续
,以及
返回
)。有一个问题需要再次讨论添加此功能。