Ich bin sowohl die Code-Blöcke in der Chrom-Registerkarte Konsole ausgeführt, aber ich bin nicht in der Lage zu
verstehen, warum die Ausgabe von zweiten Block NaN ist. Die Werte sollten im zweiten Fall nicht enthalten b, die Egal was ich denke ist egal.Javascript Arrow Funktion
var adder = {
base: 1,
add: function(a) {
var f = v => v + this.base;
return f(a);
},
addThruCall: function(a,n) {
var f = (v,n) => v + n + this.base;
var b = {
base: 2
};
return f.call(b,a,n);
}
};
console.log(adder.addThruCall(3,4)); // output: 8
Aber wenn ich
var adder = {
base: 1,
add: function(a) {
var f = v => v + this.base;
return f(a);
},
addThruCall: function(a,n) {
var f = (v,n) => v + n + this.base;
var b = {
base: 2
};
return f.call(a,n);
}
};
console.log(adder.addThruCall(3,4)); //output: NaN
Das erste Argument von fn.call() ist es, die ‚dieses ' Streit. Also 'f.call (a, n) 'ist gleichbedeutend mit dem Aufruf von' f (n, undefined) ', wobei 'a' innerhalb von f" this "ist. Daher bekommst du NaN seit Nummer + undefiniert = NaN – Shilly