Exemple De Fermeture Javascript

| | | | | |

L`un des plus grands mots de passe en JavaScript est shutdown. Il fait l`objet de nombreuses questions sur les entretiens d`embauche dans les entreprises FAANG. Dans cet article, nous parlerons de clôture et d`objectif, illustrerons les concepts avec des exemples simples, puis conclurons avec un exemple de question tirée d`un entretien avec l`un des plus grands géants de la technologie.

Quand quelqu`un vous dit que quelque chose fait ou ne fait pas partie d`un projet, qu`est-ce que cela signifie ?

J`aimerais penser à un périscope ou à un télescope quand je pense à la réponse à cette question. Ces outils nous montrent toutes sortes de choses dans les limites de l`objectif qu`il a : il est terrain. S`il est hors de portée, vous ne pouvez pas voir au-delà du diamètre de l`objectif. Et éclairer quelque chose en dehors du diamètre n`est pas possible. Vous devriez y penser car nous parlons de trois types de portées très importants et distincts en JavaScript : local, global et lexical.

Portée locale

La portée locale est la plus petite des les trois périmètres dont nous allons parler aujourd`hui. Lorsque nous déclarons une fonction, tout ce qui est entre crochets ({}) est considéré comme local à la fonction. Lorsque le moteur JavaScript lit la fonction, il déclare les variables ; quand il se termine, il détruira les variables.

Comme vous pouvez le voir, lorsque "console.log ()" est le résultat de la fonction d`accueil invoquée, nous sommes en mesure d`accéder au WebsiteName après le fonction a été jouée. Cela nous donne le canal "Hello Karma Career" que nous recherchions. Comme déjà mentionné, le console.log () de la variable qui a été déclarée dans la fonction génère une erreur car elle ne peut pas être définie .

, la raison pour laquelle WebsiteName n`est pas défini est que les variables sont créées à l`intérieur des fonctions lorsqu`elles sont appelées, puis détruites lorsque l`instruction terminale est exécutée. Tout ce qui se trouve en dehors de la fonction n`a pas accès aux éléments à l`intérieur de la fonction, à moins qu`il a une configuration particulière.

portée globale

Ce champ suivant est à peu près une traduction littérale de l`expression. Une portée globale prend des éléments déclarés en dehors d`une fonction et les réserve dans un espace où tous les scripts, méthodes et fonctions peuvent y accéder et les utiliser pour leur propre logique.

Que fait le code ci-dessus si console.log () compte à la fin du code ? Qu`espérez-vous qu`il se passera ?

Regardons le code : .

  1. variable counter déclarée et démarrée dans l`environnement global
  2. Ajout d`une fonction déclarée dans l`environnement global.
  3. Add est invoquée.
  4. la variable de compteur déclarée et démarrée dans la locale .
  5. le compteur local augmente-t-il de 1 ‚áê car local et non global ?
  6. Le compteur est renvoyé. Les fins de la fonction.
  7. Ajouter est appelée à nouveau
  8. Effectuez les étapes 4 à 6.
  9. Répétez les étapes 3 à nouveau 6.a
  10. console.log (counter), ‚áê qu`est-ce qui est renvoyé ?

Puisque la fonction se termine chaque fois que le compteur vaut 1, notre variable de compteur locale est à nouveau déclarée et redémarré à 0 à chaque exécution de la fonction. Quoi qu`il arrive, le compteur s`arrêtera toujours à 1 localement.

Si une fonction trouve une variable dans sa portée, elle ne recherche pas la portée globale de la variable - la variable globale ne change donc jamais. Alors notre console.log() va générer 0 puisque notre variable définie la plus proche dans l`environnement de cette instruction est dans l`environnement global.

Portée lexicale

La portée lexicale est l`un des concepts fondamentaux de JavaScript. C`est l`idée que la création d`une fonction ou d`une variable sera accessible à certaines parties du code et donc inaccessible à d`autres parties du code. Tout dépend de l`endroit où se trouve la déclaration de chaque variable et fonction.

Regardons ce bloc de code :.

Nous avons ici un ensemble de fonctions imbriquées. La fonction init () déclare une variable appelée var1, déclare une fonction appelée second et appelle second ().

Lorsque le compilateur parcourt ce code pour la première fois, il examine à un niveau élevé ce que nous avons :

À ce stade, nous ne pouvons rien voir d`autre à l`intérieur de init () - nous ne savons que la fonction existe lorsque notre fonction init () est appelée, le compilateur jette un autre regard de haut niveau sur ce qu`il y a à l`intérieur de la fonction :

  1. var1.
  2. secondes ()
  3. seconde () appels

l`init () ne sait rien de ce qui se passe à l`intérieur du bloc seconds () . Il ne peut que voir qu`y a-t-il dans son environnement lexical - l`état environnant.

Chaque fonction imbriquée réside dans un conteneur plus petit, tel qu`un ensemble de matriochkas russes imbriquées (voir en haut de la page par exemple si vous n`êtes pas sûr à ils sont). Les poupées sur elle savent ce qui se passe à l`intérieur de leur contenant et ce qui s`est déjà passé ou a/lu chez le parent. La plus grande poupée, par exemple, sait seulement que la prochaine poupée existe dans son conteneur. Elle ne connaît aucune des autres poupées de l`ensemble, juste ce qu`il y a dans son environnement lexical (son état) et ce qui s`est déjà passé (le royaume extérieur).

En fait, nous savons deux choses :.

  1. Le domaine extérieur ne peut pas voir le domaine interne
  2. La portée interne a accès au domaine externe.

Puisque l`extérieur ne peut pas voir ce se passe à l`intérieur, nous pouvons affirmer avec certitude qu`il s`agit d`une relation à sens unique. L`intérieur peut voir et utiliser les variables de l`extérieur, mais l`extérieur ne peut pas voir l`intérieur. C`est ce qu`on appelle la finalité lexicale .

La beauté de la portée lexicale est que la valeur d`une variable est déterminée par son emplacement dans le code . Les fonctions recherchent d`abord la signification d`une variable dans ses paramètres régionaux - si elle ne peut pas la trouver, elle va à la fonction qui définit cette fonction. S`il ne le trouve pas, il remonte la chaîne jusqu`à la prochaine fonction définie.

Cela devient un concept très important en JavaScript qui reviendra encore et encore au fur et à mesure que vous en apprendrez plus sur le framework JavaScript et son fonctionnement. Vous pouvez aller de l`extérieur, mais vous ne pouvez jamais "monter" dans l`autre sens. Ceci est très important lorsqu`il s`agit du sujet principal en question : fermeture .

Fermeture

La définition de la fermeture est très similaire à celle d`une portée lexicale. La principale différence entre les deux est que la fermeture est une fonction d`ordre supérieur et la portée lexicale ne l`est pas. Une fonction d`ordre supérieur a une caractéristique de base : elle renvoie une fonction ou utilise une fonction comme paramètre.

La fermeture est une fonction qui peut atteindre sa portée lexicale, même lorsque cette fonction est appelée ultérieurement.

La fermeture et la portée lexicale ont leurs propres variables, peuvent accéder aux variables et aux paramètres d`une fonction parente et peuvent utiliser des variables globales. avec le code suivant :

  1. Greeting () la fonction existe, mais nous ne connaissons pas encore le contenu.
  2. greetUser existe, mais je ne connais pas encore son contenu
  3. greetUser () - cette ligne appelle la précédente, qui à son tour appelle le message d`accueil ( ) fonction.
  4. userName declare
  5. welcomeGreeting () existe, mais je ne connais pas encore le contenu
  6. L`instruction Return sous le bloc welcomeGreeting () retourne la même fonction
  7. console.log (`Hello,` + username) ; Notre console.log ici peut accéder à la portée parent pour obtenir la valeur de userName
  8. Déclaration du terminal qui termine la fonction et détruit la signification des variables dans le bloc de code.
  9. Dans ce code, nous transmettons des informations en imbriquant des fonctions afin de pouvoir accéder ultérieurement à la portée des parents



    Conclusion

    Dans cet article, nous avons couvert un sujet JavaScript assez lourd : la portée et les fermetures. Je recommanderais de diversifier et de lire plusieurs articles sur le sujet. La façon dont cela est enseigné peut provenir de diverses perspectives - ce qui signifie, bien sûr, qu`il existe de nombreuses façons d`apprendre. J`espère que vous avez trouvé cet abécédaire utile ! Bonne chance dans votre étude continue sur les fermetures !

    Exemple De Fermeture Javascript find: Questions

    Exemple De Fermeture Javascript JavaScript: Questions

    Shop

    Best laptop for Fortnite

    $

    Best laptop for Excel

    $

    Best laptop for Solidworks

    $

    Best laptop for Roblox

    $

    Best computer for crypto mining

    $

    Best laptop for Sims 4

    $

    Best laptop for Zoom

    $499

    Best laptop for Minecraft

    $590

    Latest questions

    NUMPYNUMPY

    psycopg2: insert multiple rows with one query

    12 answers

    NUMPYNUMPY

    How to convert Nonetype to int or string?

    12 answers

    NUMPYNUMPY

    How to specify multiple return types using type-hints

    12 answers

    NUMPYNUMPY

    Javascript Error: IPython is not defined in JupyterLab

    12 answers

    Wiki

    Python OpenCV | cv2.putText () method

    numpy.arctan2 () in Python

    Python | os.path.realpath () method

    Python OpenCV | cv2.circle () method

    Python OpenCV cv2.cvtColor () method

    Python - Move item to the end of the list

    time.perf_counter () function in Python

    Check if one list is a subset of another in Python

    Python os.path.join () method