Callbacks sehen nur den letzten Wert aus der Schleife

  • Ich habe diesen Code:

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

    Das Problem hier ist das "Essen" "wird immer das letzte" Essen "in" Lebensmitteln "sein. Das liegt daran, dass ich die console.log in einer Rückruffunktion habe.

    Wie kann ich den Wert in der aktuellen Iteration beibehalten?

    22 November 2011
    Trevor BurnhamJellicleCat
1 answer
  • Sie müssen den Wert einer Schleife schließen, wenn Sie möchten, dass Funktionen später ausgeführt werden. Dieser Kaffee liefert das Schlüsselwort do für.

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

    Siehe dieses Beispiel: https://gist.github.com/c8329fdec424de9c57ca

    Dies tritt auf, weil Ihr Schleifenkörper dies hat Ein Verweis auf die Variable food, bei der die Werte jedes Mal in der Schleife geändert werden. Wenn Sie die Funktion finden, wenn die Schließung der Funktion ermittelt wird, wird die Nahrungsmittelvariable auf den letzten Wert des Arrays gesetzt. Die Verwendung einer anderen Funktion zum Erstellen eines neuen Bereichs löst das Problem.

    22 November 2011
    Alex Wayne