静的スコープでは、ソースコードを分析/解析することで識別子を決定できます (多かれ少なかれ、呼び出し元の環境を知る必要がある動的スコープに対して)。
私の質問はこれです.静的スコープはソースコードを解析してスコープと識別子のバインディングを知る必要があるだけなので、コンパイル時に行われるスコープ環境/識別子のバインディングですか、またはこれらのバインディングは各関数(または新しいスコープ)がアクセスされるときに決定されます. .
JavaScript の例:
var globalVar;
function fooFunc() {
var fooVar;
function barFunc() {
var barVar;
}
}
この単純な JavaScript の例では、プログラムを調べることで、barFunc 環境に barVar の変数があり、fooVar と barFunc 関数を持つ親環境があり、グローバルの親環境があることを視覚的に判断できます。 globalVar を持つスコープ。コンパイラ/インタプリタがソース コード全体を読み取ってバインディングを作成するのか、それともこれらの決定が関数ごと (またはスコープごと) で行われるのか、興味があります。
不明な点がある場合は、お知らせください。
ありがとうございました、
編集:私の例はJavaScript(特に興味があります)にありますが、これが言語(JavaScript、C / C ++、C#/ VBなど)間で異なるかどうかも興味があります.