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 ?
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); } }
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(); }
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
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.
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!