Maison >interface Web >js tutoriel >Introduction aux déclarations de variables JS

Introduction aux déclarations de variables JS

PHPz
PHPzoriginal
2024-09-04 14:32:02788parcourir

Rédaction de ce guide pour le père qui construit alis4ops.com.

  • Je m'appelle "Baba".
  • Il apprend à créer des applications Web, anciennement ingénieur électricien.
  • Laissera quelques notes autour de l'article faisant référence à lui, afin que toute personne sur interwebz lisant ceci puisse ignorer ces lignes. J'espère que cela ne vous dérange pas !

Contexte

Nous avons les fonctions suivantes :

  • handleStartTouch
  • handleMoveTouch

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 :

  • if (draggedElement) {

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

Problème

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 ?


Explication

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

  • const
  • laisser
  • var

Par exemple, nous ne le définissons pas ainsi :

    const draggedElement = event.target;

Déclaration de variable (alias mots-clés)

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.


Exercice

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

  • accéder à « Console »
  • Copiez et collez le code ci-dessus
  • Appuyez sur Entrée
  • Il reviendra indéfini, c'est bien.

Intro to JS Variable Declarations

Dans la console, appelez add(1,1)

  • vous verrez la console revenir 2
add(1,1)
=> 2

Intro to JS Variable Declarations

Ensuite, appelez printStatus

  • Vous verrez la sortie Somme : 2

Intro to JS Variable Declarations

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 :

  • somme = x + y

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")
  }
}
  • Aller sur Chrome
  • Actualisez la page avec Ctrl + R
    • vous pouvez également ouvrir un nouvel onglet et rouvrir la console devtools.

Définissons à nouveau les fonctions dans le journal de la console.

  • Copiez et collez l'extrait de code ci-dessus dans la console et appuyez sur Entrée.

Nous devons le redéfinir car nous avons lancé une nouvelle console de développement.

Intro to JS Variable Declarations

Maintenant dans la console, appelez add(2, 2)

  • vous verrez la console revenir 4

Intro to JS Variable Declarations

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

Intro to JS Variable Declarations

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn