Heutzutage versucht jeder, diese Art von Funktionen höherer Ordnung zu verwenden, um vielversprechende Ergebnisse mit weniger Code zu erzielen. Aber ich frage mich, wie diese Funktionen intern funktionieren.
Angenommen, ich schreibe so etwas
var numbers = [16, 25, 36];
var results = numbers.map(Math.sqrt);
console.log(results); // [4, 5, 6]
Ich weiß, dass jedes Element des 'number'-Arrays einzeln iteriert, aber wie ?
Ich habe versucht, danach zu suchen, aber ich habe noch keine zufriedenstellende Antwort erhalten.
javascript
node.js
dictionary
higher-order-functions
Bilal Khan
quelle
quelle
map
die dem Typ Array hinzugefügt wurde. Diese Funktion übernimmt eine Funktion als Parameter, die dann beim Durchlaufen des Arrays aufgerufen wird. Die Rückgabewerte der Funktionsaufrufe werden dann in einem Array zurückgegeben.Antworten:
.map
ist nur eine Methode, die einen Rückruf akzeptiert, den Rückruf für jedes Element des Arrays aufruft und den Wert einem neuen Array zuweist. Es ist nichts Besonderes daran. Sie können es sogar ganz einfach selbst implementieren:Um vollständig spec-kompatibel zu sein, dann werden Sie auch benötigen unter anderem zu prüfen, dass das
this
ein Objekt ist, dass dercallback
aufrufbar ist, und auf.call
den Rückruf mit dem zweiten Parameter zu übergeben ,myMap
wenn es ein, aber das sind Details nicht wichtig für ein beginnendes Verständnis von Funktionen höherer Ordnung.quelle
Ich denke, jeder Anbieter sollte es gemäß der Spezifikation implementieren
Die eigentliche Implementierung, zum Beispiel V8, kann etwas komplex sein, beziehen Sie sich zunächst auf diese Antwort . Sie können die v8-Quelle auch in Github referenzieren, aber es ist möglicherweise nicht einfach, nur einen Teil isoliert zu verstehen.
Zitiert aus der obigen Antwort:
ES2015 spec:
"length"
)).quelle
<li>
list-style-type
weder in Chrome noch in FF kopiert werden. Haben Sie die Zahlen manuell eingegeben oder fehlt mir eine bessere Methode?