Warum nicht Konsole.melden Sie die Arbeit, wenn als parameter übergeben forEach?

Dies ist nur aus Neugier, aber haben Sie eine Idee, warum dieser code nicht funktioniert?

[1, 2, 3, 4, 5].forEach(console.log);

//Prints 'Uncaught TypeError: Illegal invocation' in Chrome

Auf der anderen Seite, scheint dies gut zu funktionieren:

[1, 2, 3, 4, 5].forEach(function(n) { console.log(n) });

So... ?

  • Sie haben den falschen this.
  • In der Tat. Beantworten Sie mich, ich bin so ein idiot
  • Kann es einfach gelöscht werden? Es ist nicht wirklich hilfreich =/
  • Ich meinte die Frage, aber ich denke, jemand mochte es genug, um upvote so ist es vielleicht nützlich war jemand, nachdem alle... Es ist nie für mich klar, wenn upvotes sind von Menschen finden, die Frage ist wirklich nützlich, oder einfach nur aus Beantworter versuchen zu Spiel das system.
  • In Ordnung mit mir, aber Sie denken, dass ist wirklich notwendig? es wurden 2 upvotes... vielleicht können wir ihn schließen, als ein Duplikat von Frage, dass die Gespräche über bind in js?
  • Es wäre wahrscheinlich am besten in der Nähe, wie ein dupe der Frage, wie man this ist geklärt... es gibt andere Wege als bind zu umgehen.
  • Warum schliessen? Dies ist ein wirklich Interessantes Rätsel. In der Tat, ich bin immer noch versuchen, wickeln Sie meinen Kopf herum.
  • Vergleichen Sie die Ausgabe dieser in der chrome console: [1,2,3,4,5].forEach(console.log.bind(console)); ... [1,2,3,4,5].forEach(function(x){console.log(x)});
  • ja, vielleicht bin ich falsch. Es könnte ein Fall ungewöhnlich genug, dass es schwer zu sagen, was passiert in der ersten.
  • yep, das ist eine gute Frage. @PabloFernandez - ich nehme an, du hast die inspiration für diese Frage nach der Lektüre von "Async Javascript" Buch von Trevor Burnham - Seite 13 - genau das gleiche Beispiel-code 🙂

Schreibe einen Kommentar