回调只能看到循环中的最后一个值

时间:2011-11-22 00:13:21

标签: coffeescript

我有这段代码:

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

这里的问题是“食物”将永远是“食物”中的最后一种“食物”。那是因为我在回调函数中有console.log。

如何保留当前迭代中的值?

1 个答案:

答案 0 :(得分:10)

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

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

查看此示例: https://gist.github.com/c8329fdec424de9c57ca

这是因为你的循环体有一个food变量的引用,它每次通过循环都会改变值,当你运行时,如果找到了闭包函数,那么就会找到函数变量设置为数组的最后一个值。使用另一个函数来创建新范围可以解决问题。