variable Scoping in Ereignishandlern: Das "this" conundrum
In JavaScript können Instanzmethoden, die als Ereignishandler -Rückrufe verwendet werden, zu Scoping -Problemen führen. Wenn der Ereignishandler ausgelöst wird, verschiebt sich der Umfang von "This" von der beabsichtigten Instanz zu dem Element, das den Rückruf hervorzurufen. Dies erfordert die Verwendung einer Variablen, um den Umfang der Instanz zu "erfassen" und beizubehalten.
Die Technik, eine "Selbst" -Variable zu alias "this" zu deklarieren und an den Ereignishandler weiterzugeben, wie im Code -Snippet zu sehen ist, ist eine übliche Lösung. Sein unkonventionelles Erscheinungsbild kann jedoch Bedenken hinsichtlich seiner Eignung aufnehmen. Während Verschlüsse eingebettete Funktionen ermöglichen, aus ihrem übergeordneten Umfang auf Variablen zugreifen zu können, verhält sich dieses pseudo-variable unterschiedlich unterschiedlich. Wie der Code demonstriert:
// Versuchen Sie, "this" in eingebetteten Funktionen zu verwenden Funktion xyz () { console.log (this); // falsch } Dieses Verhalten erfordert einen geänderten Ansatz:
// zuweisen "this" einer Variablen (d. H. ABC) und verwenden Sie stattdessen die Variable var abc = this; Funktion xyz () { console.log (ABC); // Richtig }
// Attempt to use "this" in embedded functions function xyz() { console.log(this); // Incorrect }
Daher, während die Aliasing-Methode "Self" -Aliasing funktional ist, bietet die Alternative, "diese" diese "diese" einer Variablen ausdrücklich zuzuweisen und zu verweisen, eine konventionellere und robustere Lösung zu den Skoping-Problemen zuzuweisen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3