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.
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.
Le contexte d'exécution est l'environnement d'exécution du code actuel.
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é.
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
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 JS1.2 Création d'une chaîne de portées
let a = 'javascript'; function foo() { console.log('foo'); bar(); } function bar() { console.log('bar'); } foo();
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.
foo()
foo()
bar()
foo()
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!