例によって字句スコープを簡単に理解できます。
字句スコープ (静的スコープ)
で字句スコープにより、すべての内部レベルがその外部レベルにアクセスできます。 C のような構文の例:
void fun() { int x = 5; void fun2() { printf("%d", x); } }
動的スコープ
動的スコープにより、呼び出しチェーンに応じて、動的に決定された外部スコープから内部レベルが変数にアクセスできるようになります。 。 C に似た構文の例:
void fun() { printf("%d", x); } void dummy1() { int x = 5; fun(); } void dummy2() { int x = 10; fun(); }
ここで、fun は、dummy1 または dummy2 のいずれかから x にアクセスできます。あるいは、その中で宣言された x を使用して fun を呼び出すその他の関数から x にアクセスできます。
dummy1(); // Prints 5 dummy2(); // Prints 10
主な違い
静的スコープはコンパイル時に決定できます。一方、動的スコープはランタイム呼び出しチェーンに依存します。動的スコープは、呼び出された関数にすべての変数の参照を渡すようなものです。
静的スコープは、理解を容易にするため、多くの場合好まれます。 Lisp を含むほとんどの言語は、最終的にこのアプローチを採用しました。呼び出しチェーンが実行時の条件に依存する場合、動的スコープによって複雑さが生じる可能性があります。
以上が語彙的スコープと動的スコープ: 違いは何ですか?また、静的スコープが推奨される理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。