JavaScript-Funktion innerhalb der Schleife

Kann mir jemand erklären, warum JSLint beschwert sich über die "Funktion innerhalb der Schleife" mit diesem Beispiel:

  for (var i = 0; i < buttons.length; i++) {
    (function(i) {
      buttons[i].onclick = function(e) {
        t.progressBars[t.current].update(buttons[i].getAttribute("data-value"));
      }
    })(i);
  }

Aber nicht ganz, wenn ich es zu ändern:

function makeHandler(i)
  {
    return function() {
        t.progressBars[t.current].update(buttons[i].getAttribute("data-value"));
      }
  }

  for (var i = 0; i < buttons.length; i++) {

      buttons[i].onclick = makeHandler(i);

  }

Ich verstehe nicht ganz, wie es scheint, dass mit jeder loop-iteration neue Funktion-Objekt zurückgegeben werden, auch wenn es passiert, innerhalb von makeHandler() Funktion. Warum das zweite Beispiel ist ok, mit JS linters?

  • 2. Beispiel bindet ich mit dem callback. 1. man muss nicht. haben Sie alle Werte i gleich n im ersten Beispiel. wenn das zweite eine 0 bis n-1.
  • Wieder schauen. Der erste ist ein IFFE und macht das gleiche verbindliche.
  • Es ist nur ein unter-informiert Warnung von jsLint. Menschen geben Ihre Warnungen mehr credit als er verdient. Es kann Sie warnen, über Dinge, die Sie nicht tun sollten, aber alles, was es ber ist kein problem und auch nicht zwingend etwas geändert werden sollten.
  • Oh Gott. bin ich etwas fehlt? siehe diese Geige. nicht binden.
  • du bist die Alarmierung der Anzahl 1, nicht i. Dass nicht alles zeigen.
  • Äh, bist du aufrufen alert(1); versuchen Sie anrufen alert(i)
  • Sie haben einen Tippfehler in der fiddle alert(1) sollten wachsam sein, (ich) glaube ich
  • oh. ja. tut mir Leid. danke für die Hilfe 🙂
  • mein Fehler. 🙂 danke für die Hilfe.
  • Dank Bruder. hab es jetzt.

InformationsquelleAutor spirytus | 2014-10-02
Schreibe einen Kommentar