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

ajs*_*sie 4 coffeescript

我有这个代码:

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变量的引用,每次通过循环都会改变值,当你运行时,如果找到闭包函数,就会创建函数,并发现食物变量设置为数组的最后一个值.使用另一个函数来创建新范围可以解决问题.