schrieb ich eine Funktion:über Javascript-Funktion valueOf toString und 'Curry' Funktion anders verhalten in Chrome, Firefox und Knoten Umgebung
function add(){
let arr = [];
arr = arr.concat(Array.prototype.slice.apply(arguments))
let fun = function(){
arr = arr.concat(Array.prototype.slice.apply(arguments))
return fun
}
fun.toString = function(){
console.log(222)
return arr.reduce(function(total, num){
return total+num
}, 0)
}
return fun
}
console.log(add(1,2)(2,3)(3))
Dies ist in Chrome: enter image description here
Zwei Fragen:
In der ersten Zeile, warum ist
'f 11'
, nicht'11'
?Warum Ausgabe
'f 11'
erstens, nicht'222'
, ich denke, die Typumwandlung sollte zuerst ausgeführt werden, und dann berechnete Ergebnis auf der Konsole ausgeben.
Eine weitere seltsame Sache, ist es das Ergebnis in Firefox mit gleichen Codes: enter image description here
Und das Ergebnis in Knotenumgebung: enter image description here
Ich verstehe nicht, warum es in FF scheint und Knoten hat die berechnete Operation nicht ausgeführt.
Bitte helfen Sie mir ... Vielen Dank!
Die * f * bedeutet * Funktion * die ist richtig –
Was ist der Sinn von diesem? Warum müssen Sie toString aufrufen, um den Wert zu erhalten? Das ist völlig kontraintuitiv. Der Versuch, eine 'add'-Funktion zu haben, die sowohl variadisch als auch gleichzeitig curried ist, ist ... komisch. –
@ JonasW. korrekte Funktion? – DaXiong1