Maison  >  Article  >  interface Web  >  Vous apprendre étape par étape à comprendre le contexte d'exécution en JS

Vous apprendre étape par étape à comprendre le contexte d'exécution en JS

青灯夜游
青灯夜游avant
2021-06-02 14:20:302788parcourir

Cet article vous guidera étape par étape pour comprendre en profondeur le contexte d'exécution en JavaScript. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Vous apprendre étape par étape à comprendre le contexte d'exécution en JS

Ce n'est qu'en comprenant le contexte d'exécution que nous pourrons mieux comprendre le langage JavaScript lui-même, comme la promotion des variables, la portée, la fermeture, etc.

Contexte d'exécution

Le contexte d'exécution est l'environnement d'exécution du code actuel.

Il existe principalement trois types de contexte d'exécution :

  • Contexte d'exécution global : L'environnement d'exécution global est l'environnement d'exécution le plus périphérique du monde. navigateur L'objet global est window, celui-ci pointe vers cet objet

  • Contexte d'exécution de la fonction : il peut y en avoir d'innombrables, ils seront créés lors de l'appel de la fonction. Chaque appel de fonction crée un nouveau contexte d'exécution.

  • Contexte d'exécution d'évaluation, rarement utilisé.

Chaque contexte d'exécution possède trois attributs importants :

  • objet variable, VO) : Chaque environnement d'exécution est associé à un objet variable, et toutes les variables et fonctions définies dans l'environnement sont stockées dans cet objet. Bien que le code que nous écrivons n’ait pas accès à cet objet, l’analyseur l’utilise en coulisse lors du traitement des données.

Dans un contexte de fonction, utilisez un objet d'activation (AO) pour représenter un objet variable. Les objets actifs et les objets variables sont en fait la même chose. Ce n'est qu'en entrant dans un environnement d'exécution que l'objet variable de ce contexte d'exécution sera activé à ce moment-là, il est appelé objet actif (AO). peut être consulté.
  • Chaîne de portées  : Lorsque du code est exécuté dans un environnement, une chaîne de portées d'objets variables est créée. Le but de la chaîne de portée est de garantir un accès ordonné à toutes les variables et fonctions auxquelles l'environnement d'exécution a accès.

  • ce

Cycle de vie du contexte d'exécution : Créer-> Exécuter-> >

1. Phase de création :

1.1 Créer un objet variable :
Arguments des paramètres de la fonction d'initialisation
  • Déclaration de fonction
  • Déclaration de variable
  • Un exemple simple pour comprendre l'objet variable
function getName(name) {
    var b = 2;
    function foo() {};
    var bar = function() {};

}
getName('lucystar')

L'AO à ce moment est à peu près la suivante

AO = {
    arguments: {
        0: 'lucystar',
        length: 1
    },
    name: 'lucystar',
    b: undefined,
    foo: reference to function foo(){},
    bar: undefined
}

Ce qui précède exemple Cela implique la promotion de variables et la promotion de fonctions. Cela a également été introduit dans l'article

Comprendre var, let et const depuis le bas de JS
1.2 Création d'une chaîne de portées
La portée d'une fonction est déterminée lorsque la fonction est définie. La chaîne de portée elle-même contient des objets variables. Lors de la recherche d'une variable, elle recherchera d'abord à partir de l'objet variable dans le contexte actuel. Si elle n'est pas trouvée, elle recherchera à partir de l'objet variable du contexte d'exécution parent jusqu'à ce qu'elle trouve la variable. objet du contexte d'exécution global.

1.3 Déterminer la direction de ceci
Cette partie est divisée en plusieurs situations Pour plus de détails, vous pouvez consulter un autre article
. Comprendre cela&appeler&appliquer&lier dans un seul article

2. La phase d'exécution

exécute l'affectation des variables et l'exécution du code

3. 🎜>

exécution Le contexte est extrait de la pile et recyclé par le mécanisme de garbage collection. Pour plus d'informations sur le recyclage de la mémoire, vous pouvez consulter le Mécanisme de gestion de la mémoire et de récupération de place V8

Pile de contexte d'exécution

La pile de contexte d'exécution est utilisée pour gérer l’exécution contextuelle. Une fois le contexte d'exécution créé, le moteur JavaScript poussera le contexte d'exécution dans la pile. Cette pile utilisée pour gérer le contexte d'exécution est généralement appelée pile de contexte d'exécution, également appelée pile d'appels.
let a = 'javascript';

function foo() {
    console.log('foo');
    bar();
}
function bar() {
    console.log('bar');
}
foo();

Vous apprendre étape par étape à comprendre le contexte dexécution en JS

Lorsque le code ci-dessus est chargé dans le navigateur, le moteur JavaScript crée un contexte d'exécution global et le pousse dans Pile d'exécution actuelle.
  • Lorsqu'il rencontre l'appel de fonction
  • , le moteur JavaScript crée un contexte d'exécution de fonction foo et le pousse en haut de la pile d'exécution actuelle.
  • foo()

    Lorsque la fonction
  • est appelée depuis l'intérieur de la fonction
  • , le moteur JavaScript crée un contexte d'exécution de fonction de barre et le pousse en haut de la pile d'exécution actuelle.

    foo()bar()

    Lorsque la barre de fonctions termine l'exécution, son contexte d'exécution sera extrait de la pile actuelle et le flux de contrôle atteint le contexte d'exécution suivant, qui est le contexte d'exécution de la fonction
  • .
  • foo()

    Lorsque foo() termine l'exécution, son contexte d'exécution est extrait de la pile et le flux de contrôle atteint le contexte d'exécution global. Une fois l'exécution de tout le code terminée, le moteur javaScript supprime le global de. le contexte d’exécution actuel.
Pourquoi les types de données de base sont-ils stockés sur la pile et les types de données de référence sur le tas ? Le moteur JavaScript doit utiliser la pile pour maintenir l'état du contexte pendant l'exécution du programme. Si l'espace de la pile est volumineux, toutes les données seront stockées dans l'espace de la pile, ce qui affectera l'efficacité du changement de contexte et donc l'efficacité de l'exécution de. tout le programme.

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de programmation ! !

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer