[解決済み] 語彙的スコープとは何ですか?
2022-03-23 03:09:11
質問
レキシカルスコーピングの簡単な紹介は?
どのように解決するのですか?
例題で理解しました :)
最初に 字句の範囲 (とも呼ばれます)。 静的スコープ ) を、C言語ライクな構文で表現しています。
void fun()
{
int x = 5;
void fun2()
{
printf("%d", x);
}
}
すべての内側のレベルは、その外側のレベルにアクセスすることができます。
という方法もあります。 ダイナミックスコープ の最初の実装で使用された Lisp また、C言語ライクな構文で。
void fun()
{
printf("%d", x);
}
void dummy1()
{
int x = 5;
fun();
}
void dummy2()
{
int x = 10;
fun();
}
ここで
fun
にアクセスすることができます。
x
で
dummy1
または
dummy2
または、任意の
x
を呼び出すすべての関数で
fun
と
x
と宣言しています。
dummy1();
は5と表示されます。
dummy2();
は10と表示されます。
前者はコンパイル時に推論できるため静的と呼ばれ、後者は外側のスコープが動的で関数の連鎖呼び出しに依存するため動的と呼ばれる。
静的なスコーピングは目に優しいと思うんです。Lispでさえも、ほとんどの言語が最終的にこの方式になりました(両方できますよね)。動的スコープとは、呼び出された関数にすべての変数の参照を渡すようなものです。
なぜコンパイラが関数の動的スコープの外側を推測できないかの例として、前回の例を考えてみましょう。もし、こんな風に書いたら
if(/* some condition */)
dummy1();
else
dummy2();
コールチェーンは実行時の条件に依存する。もしそれが真であれば、コールチェーンは次のようになる。
dummy1 --> fun()
条件がfalseの場合。
dummy2 --> fun()
の外部スコープは
fun
どちらの場合も呼び出し元である
に加えて、呼び出し側の呼び出し側など
.
なお、C言語では関数のネストやダイナミックスコーピングはできません。
関連
-
vueのグローバルがscss(mixin)を導入。
-
[解決済み】"フォームが接続されていないため、フォームの送信がキャンセルされました "というエラーの取得について
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] JavaScriptの変数のスコープとは何ですか?
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
JavaScriptのクロージャの説明
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
[解決済み] ループ内のJavaScriptクロージャ - シンプルな実用例
-
[解決済み] JavaScriptの変数のスコープとは何ですか?