我有这个代码:
for food in foods
Person.eat ->
console.log food
Run Code Online (Sandbox Code Playgroud)
这里的问题是"食物"将永远是"食物"中的最后一种"食物".那是因为我在回调函数中有console.log.
如何保留当前迭代中的值?
Ale*_*yne 10
如果要生成稍后运行的函数,则需要关闭循环的值.这就是咖啡提供的do关键词.
for food in foods
do (food) ->
Person.eat ->
console.log food
Run Code Online (Sandbox Code Playgroud)
请参阅此示例:https: //gist.github.com/c8329fdec424de9c57ca
之所以会发生这种情况是因为你的循环体有一个对food变量的引用,每次通过循环都会改变值,当你运行时,如果找到闭包函数,就会创建函数,并发现食物变量设置为数组的最后一个值.使用另一个函数来创建新范围可以解决问题.