In dem folgenden Code:Javascript: Warum haben Callback-Funktionen mit globalem Ausführungskontext Zugriff auf Bereichsvariablen?
function test() {
var x = 5 // scoped to test function
console.log(this); // global object
logCb(function(){
console.log(this); // global object
console.log(x);
})
}
function logCb (cb) {
console.log(this); // global object
cb() // This still seems to execute within the test function scope? why...
}
test()
x wird zu testen scoped, und dies ist, wo die Callback-Funktion definiert ist. Ich hätte erwartet, Linie cb()
einen Fehler zu werfen, da die Funktion logCb() keinen Zugriff auf die Variable x hat.
Dies ist jedoch nicht der Fall. Warum? Es scheint, als ob Referenzen innerhalb des Callbacks während der Zuweisung und NICHT während der Ausführung erzeugt werden - was ich denke, wenn man das Hochziehen berücksichtigt - dh während der Kompilierung wird die Callback-Funktion an die Spitze von 'test' gehievt und dann erfolgt die Zuweisung innerhalb von Tests Umfang?
Ich habe gelesen, dass die Ausführung nicht das gleiche wie der Geltungsbereich ist. In diesem Artikel: http://ryanmorr.com/understanding-scope-and-context-in-javascript/ scheint dieser Satz scope pertains to the variable access of a function when it is invoked and is unique to each invocation
zu implizieren, dass der Rückruf innerhalb der Testfunktion aufgerufen wird.
Da es scheint mir, dass egal, wo die Callback-Funktion aufgerufen wird, wäre es immer noch zu testen.
Ich denke, meine Frage ist:
Wie wird die Callback-Funktion in Bezug auf die Definition behandelt und dann Aufruf, wenn man über Umfang und Ausführungskontext gedacht?
Haben Sie schon einmal über Schließungen in Javascript gehört? –
Der Umfang einer Funktion hängt vollständig davon ab, wo sie * deklariert * ist und nicht wo sie aufgerufen wird. Das 'this 'einer Funktion steht nicht im Zusammenhang mit dem Bereich und basiert auf * wie * die Funktion aufgerufen wird. – nnnnnn
@RajaprabhuAravindasamy. Also hat der Callback den Test geschlossen? –