Ich schreibe diesen Leitfaden für meinen Vater, der alis4ops.com aufbaut.
Wir haben folgende Funktionen:
Baba definiert in DragDrop.js
function handleStartTouch(event) { draggedElement = event.target; const touch = event.touches[0]; touchStartX = touch.clientX - draggedElement.getBoundingClientRect().left; touchStartY = touch.clientY - draggedElement.getBoundingClientRect().top; } function handleMoveTouch(event) { event.preventDefault() if (draggedElement) { const touch = event.touches[0]; // ..more code } }
Beachten Sie, dass wir online auf draggedElement zugreifen:
hanldeMoveTouch löst beim Aufruf keinen Fehler aus.
Das Platzieren eines Haltepunkts auf if (draggedElement) in Chrome DevTools zeigt, dass draggedElement in dasselbe HTML-Element aufgelöst wird, das von event.target in handleStartTouch bereitgestellt wird
Warum können wir auf draggedElement in handleMoveTouch zugreifen, obwohl es in handleStartTouch definiert ist?
Genereller ausgedrückt: Warum können wir in Javascript auf eine Variable zugreifen, die in einer Funktion in einer anderen Funktion definiert wurde?
Sehen Sie sich die handleStartTouch-Funktion an:
function handleStartTouch(event) { draggedElement = event.target; const touch = event.touches[0]; touchStartX = touch.clientX - draggedElement.getBoundingClientRect().left; touchStartY = touch.clientY - draggedElement.getBoundingClientRect().top; }
Im Einzelnen die Zeile:
draggedElement = event.target;
Der Variablenname „draggedElement“ wird nicht mit einem der Schlüsselwörter deklariert
Zum Beispiel definieren wir es nicht so:
const draggedElement = event.target;
Wenn wir in Javascript keine Variablendeklarationen (auch Schlüsselwörter genannt) verwenden, betrachtet Javascript diese Variable als globale Variable.
Betrachten Sie das folgende Beispiel, in dem wir zwei Funktionen definieren:
// Takes in two arguments and returns the sum function add(x, y) { sum = x + y return sum } // prints sum if it is defined function printStatus() { if (sum) { console.log("Sum: ", sum) } else { console.log("Sum does no exist") } }
Öffnen Sie DevTools in Chrome
Rufen Sie in der Konsole add(1,1) auf
add(1,1) => 2
Dann rufen Sie printStatus auf
Wir können sehen, dass printStatus() auf die in add(x, y) definierte Variablensumme zugreifen kann
Das liegt daran, dass die Variable sum ohne die folgenden Schlüsselwörter deklariert wird:
Jetzt ändern wir add(x, y) add, um eine Variablendeklaration für sum zu verwenden
// Takes in two arguments and returns the sum function add(x, y) { const sum = x + y // use the variable declartion const return sum } // prints sum if it is defined function printStatus() { if (sum) { console.log("Sum: ", sum) } else { console.log("Sum does no exist") } }
Lassen Sie uns die Funktionen im Konsolenprotokoll noch einmal definieren.
Wir müssen es neu definieren, da wir eine neue Entwicklungskonsole gestartet haben.
Rufen Sie nun in der Konsole add(2, 2) auf
Rufen Sie printStatus auf, um zu sehen, ob auf die in add(x, y) definierte Variablensumme zugegriffen werden kann
printStatus() > Uncaught ReferenceError: sum is not defined at printStatus (<anonymous>:9:3) at <anonymous>:1:1
Der Fehler besagt, dass die Summe nicht definiert ist
Dies bestätigt, dass, wenn eine Variable mit einer Variablendeklaration (const, let, var) innerhalb einer Funktion definiert wird, der Gültigkeitsbereich dieser Variablen nur innerhalb der Funktion liegt
Wenn eine Variable ohne einer Variablendeklaration innerhalb einer Funktion definiert wird, ist der Gültigkeitsbereich dieser Variablen global.
Ich hoffe, das hilft Baba (und allen anderen, die dies lesen.)
Das obige ist der detaillierte Inhalt vonEinführung in JS-Variablendeklarationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!