Maison > interface Web > js tutoriel > Portée lexicale ou dynamique : quelle est la différence et pourquoi préférons-nous la portée statique ?

Portée lexicale ou dynamique : quelle est la différence et pourquoi préférons-nous la portée statique ?

Patricia Arquette
Libérer: 2024-12-09 16:15:15
original
552 Les gens l'ont consulté

Lexical vs. Dynamic Scoping: What's the Difference and Why Do We Prefer Static Scoping?

Portée lexicale : une explication détaillée

La compréhension de la portée lexicale peut être simplifiée à l'aide d'exemples.

Portée lexicale (portée statique)

Dans la portée lexicale, chaque niveau interne peut accéder à son niveau externe niveaux. Un exemple en syntaxe de type C :

void fun() {
    int x = 5;

    void fun2() {
        printf("%d", x);
    }
}
Copier après la connexion

Dynamic Scoping

Dynamic Scoping permet aux niveaux internes d'accéder à des variables à partir de portées externes déterminées dynamiquement, en fonction de la chaîne d'appels. . Un exemple de syntaxe de type C :

void fun() {
    printf("%d", x);
}

void dummy1() {
    int x = 5;

    fun();
}

void dummy2() {
    int x = 10;

    fun();
}
Copier après la connexion

Ici, fun peut accéder à x depuis dummy1 ou dummy2, ou toute autre fonction qui appelle fun avec x déclaré à l'intérieur.

dummy1(); // Prints 5
dummy2(); // Prints 10
Copier après la connexion

Différences clés

La portée statique peut être déterminée au moment de la compilation, tandis que la portée dynamique dépend de la chaîne d’appels d’exécution. La portée dynamique revient à transmettre les références de toutes les variables à la fonction appelée.

Pourquoi utiliser la portée statique ?

La portée statique est souvent préférée car elle simplifie la compréhension. La plupart des langages, dont Lisp, ont finalement adopté cette approche. La portée dynamique peut introduire de la complexité lorsque la chaîne d'appels dépend des conditions d'exécution.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal