makeWorker
ist eine Art von redundanten hier, wenn a()
ohne this
sowieso genannt wird, also lassen Sie uns den Anruf zu makeWorker
mit ersetzen, was es tut:
function a() {
this.ename = "Pete";
var work = function() {
console.log(this);
console.log(this.ename);
};
work();
}
var ename = "John";
a();
und ersetzen Sie den Aufruf von work
mit was es macht:
function a() {
this.ename = "Pete";
console.log(this);
console.log(this.ename);
}
var ename = "John";
a();
und replac e den Anruf an a
mit dem, was sie tut, wieder unter der Annahme, dass this
das globale Objekt ist:
var ename = "John";
this.ename = "Pete";
console.log(this);
console.log(this.ename);
So setzen Sie die globalen ename
-"John"
, setzen Sie sich dann auf "Pete"
, dann ausdrucken und das Ergebnis ist "Pete"
. Nichts Seltsames. Es könnte Ihnen helfen, etwas zu protokollieren, wenn jede Zuordnung im ursprünglichen Code geschieht:
function a() {
function makeWorker() {
console.log("Setting ename to Pete");
this.ename = "Pete";
return function() {
console.log(this.ename);
};
}
var work = makeWorker();
work();
}
console.log("Setting ename to John");
var ename = "John";
a();
@MiHawk: Wo kommt das Hissen ins Spiel? – Ryan