Array.prototype.reduce
‚s length
ist 1, da der zweite Parameter ist optional. *
So ist es mir nicht klar ist, was genau der Zweck der length
Eigenschaft.
den Entwickler sagen, wie viele Parameter erklärt sie mit einem Standardwert (falls vorhanden) oder den Rest Parameter (falls vorhanden) vor dem ersten Parameter hat, je nachdem, was frühestens in der Parameterliste ist. Oder als the spec puts it:
Der Wert der Eigenschaft length
eine ganze Zahl ist, die die typische Anzahl von Argumenten zu erwarten durch die Funktion anzeigt.
Der genaue Algorithmus ist in the spec's Static Semantics: ExpectedArgumentCount section.
Wenn es verwendet wird, um dem Entwickler nützliche Informationen zu geben, dann ist dies nicht der Fall.
Nun, das ist eine Frage der Meinung. :-)
Wenn Sie eine Sprache wie JavaScript haben, wo Funktionen nur eine Erwartung ausdrücken können, aber mit weniger oder mehr Argumenten aufgerufen werden können, und insbesondere wenn Sie die Konzepte von Standardparameterwerten und Ruheparametern hinzufügen, ist das nicht überraschend Die Funktionalität ist ein bisschen ein weiches Konzept.
Einige Spaß Beispiele:
function ex1(a) { } // length is 1, of course
function ex2(a, b = 42) { } // length is 1, `b` has a default
function ex3(a, b = 42, c) { } // length is 1, `b` has a default and
// `c` is after `b`
function ex4(a, ...rest) { } // length is 1 yet again, rest parameter doesn't count
* In ES5, würde seine Erklärung in JavaScript sein:
function reduce(callback) {
// ...
}
... und dann wäre es arguments.length
ob Sie bestimmen, verwenden‘ d angenommen, ein initialValue
.
In ES2015 + (aka "ES6" +), wäre es entweder noch so sein, oder so aussehen:
function reduce(callback, ...args) {
// ...
}
... und verwenden args.length
, um zu sehen, ob es einen Anfangswert war.
Oder vielleicht wie folgt aus:
const omitted = {};
function reduce(callback, initialValue = omitted) {
// ...
}
... und dann initialValue === omitted
verwenden zu wissen, ob Sie einen Anfangswert geliefert hatte. (Der Standardwert von initialValue
kann nicht undefined
oder null
oder ähnlich sein, da die Funktion auf Zweig basiert hat, ob das Argument zur Verfügung gestellt wurde [nicht das, was ihr Wert ist]. Aber wir können das tun, mit Objektidentität.)
[ECMAScript 5.1, Abschnitt 15.3.5.1, 'Länge'] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.3.5.1):" _Der Wert der length -Eigenschaft ist eine Ganzzahl, die die ** "typische" Anzahl von Argumenten angibt, die von der Funktion erwartet werden. Die Sprache erlaubt es jedoch, die Funktion mit einer anderen Anzahl von Argumenten aufzurufen._ " – Andreas
' reduce 'erwartet einen Parameter (notwendig) und das andere ist optional, also zählt es nicht! –
zumindest muss man eine Callback-Funktion ausführen, um zu reduzieren. –