Wenn ich den folgenden Javascript-Schnipsel ausführen ...Bindung eine Javascript-Funktion mit null oder nicht definiert als thisArg
function addAndThis(n1, n2) {
console.log("THIS:" + this + " SUM:" + (n1+n2));
}
var boundNullThisAddAndThis = addAndThis.bind(null);
var boundUndefinedThisddAndThis = addAndThis.bind(undefined);
var boundStringThisAddAndThis = addAndThis.bind("TEST");
addAndThis(10, 20);
boundNullThisAddAndThis(100, 200);
boundUndefinedThisddAndThis(1000, 2000);
boundStringThisAddAndThis(10000, 20000);
... ich diese Ausgabe erhalten:
THIS:[object Window] SUM:30
THIS:[object Window] SUM:300
THIS:[object Window] SUM:3000
THIS:TEST SUM:30000
Die erste und die letzte Zeile der Ausgang ist wie ich erwartet habe. Aber warum ruft die gebundene Funktion, die von Function.prototype.bind erstellt wird, die umbrochene Funktion nicht mit einem Dies von null oder undefiniert auf? Ich habe nichts über dieses Verhalten im Netz gefunden.
Wenn Sie "Use strict" hinzufügen; Zu Beginn der Funktion verhält es sich wie erwartet, also werden null/undefiniert standardmäßig ins Fenster übersetzt, es sei denn, strikter Modus ist im Spiel? – sielakos
Ja, wenn Sie an null oder undefiniert binden, bedeutet dies den globalen Kontext – cstuncsik