Rédaction de ce guide pour le père qui construit alis4ops.com.
Nous avons les fonctions suivantes :
Baba défini dans 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 } }
Remarquez que nous accédons à draggedElement en ligne :
hanldeMoveTouch ne génère pas d'erreur lors de son appel.
Placer un point d'arrêt sur if (draggedElement) dans Chrome DevTools montrera que draggedElement se résout en le même élément html fourni par event.target dans handleStartTouch
Pourquoi pouvons-nous accéder à draggedElement dans handleMoveTouch même s'il est défini dans handleStartTouch
Plus génériquement, pourquoi peut-on accéder à une variable qui a été définie dans une fonction dans une autre fonction en javascript ?
Regardez la fonction handleStartTouch :
function handleStartTouch(event) { draggedElement = event.target; const touch = event.touches[0]; touchStartX = touch.clientX - draggedElement.getBoundingClientRect().left; touchStartY = touch.clientY - draggedElement.getBoundingClientRect().top; }
Plus précisément la ligne :
draggedElement = event.target;
Il ne déclare pas le nom de la variable draggedElement en utilisant l'un ou l'autre des mots-clés
Par exemple, nous ne le définissons pas ainsi :
const draggedElement = event.target;
En Javascript, lorsque nous n'utilisons pas les déclarations de variables (également appelées mots-clés), javascript considère cette variable comme une variable globale.
Considérons l'exemple suivant où nous définissons deux fonctions :
// 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") } }
Ouvrez DevTools dans Chrome
Dans la console, appelez add(1,1)
add(1,1) => 2
Ensuite, appelez printStatus
On peut voir que printStatus() peut accéder à la somme variable définie dans add(x, y)
C'est parce que la somme variable est déclarée sans les mots-clés suivants :
Changeons maintenant add(x, y) add pour utiliser une déclaration de variable pour sum
// 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") } }
Définissons à nouveau les fonctions dans le journal de la console.
Nous devons le redéfinir car nous avons lancé une nouvelle console de développement.
Maintenant dans la console, appelez add(2, 2)
Appelez printStatus pour voir si vous pouvez accéder à la somme variable définie dans add(x, y)
printStatus() > Uncaught ReferenceError: sum is not defined at printStatus (<anonymous>:9:3) at <anonymous>:1:1
L'erreur indique que la somme n'est pas définie
Cela confirme que lorsqu'une variable est définie avec une déclaration de variable (const, let, var) dans une fonction, la portée de cette variable est uniquement dans la fonction
Lorsqu'une variable est définie sans déclaration de variable dans une fonction, la portée de cette variable est globale.
J'espère que cela aidera Baba (et tous ceux qui liront ceci.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!