我有这段代码:
for food in foods
Person.eat ->
console.log food
这里的问题是“食物”将永远是“食物”中的最后一种“食物”。那是因为我在回调函数中有console.log。
如何保留当前迭代中的值?
答案 0 :(得分:10)
如果要生成稍后运行的函数,则需要关闭循环的值。这就是咖啡提供do
关键字的原因。
for food in foods
do (food) ->
Person.eat ->
console.log food
查看此示例: https://gist.github.com/c8329fdec424de9c57ca
这是因为你的循环体有一个food
变量的引用,它每次通过循环都会改变值,当你运行时,如果找到了闭包函数,那么就会找到函数变量设置为数组的最后一个值。使用另一个函数来创建新范围可以解决问题。