検索

ホームページ  >  に質問  >  本文

JavaScript における変数のスコープは何ですか?

<p>JavaScript における変数のスコープは何ですか?関数内と関数外のスコープは同じですか?それとも重要ですか?また、変数がグローバルに定義されている場合、それらはどこに保存されるのでしょうか? </p>
P粉696891871P粉696891871450日前534

全員に返信(2)返信します

  • P粉546257913

    P粉5462579132023-08-22 12:41:43

    JavaScript はスコープ チェーンを使用して、特定の関数のスコープを決定します。通常はグローバル スコープがあり、定義された各関数には独自のネストされたスコープがあります。別の関数内で定義された関数には、外部関数にリンクされたローカル スコープがあります。これは常に、スコープが定義されるソース コード内の場所です。

    スコープ チェーン内の要素は、基本的には親スコープへのポインターを持つマップです。

    変数を解析するとき、JavaScript は最も内側のスコープから開始して外側に向かって検索します。

    返事
    0
  • P粉165522886

    P粉1655228862023-08-22 10:58:25

    TLDR

    JavaScript には、字句 (静的とも呼ばれる) スコープとクロージャがあります。これは、ソース コードを確認することで識別子のスコープを決定できることを意味します。

    4 つのスコープは次のとおりです:

    1. グローバル - すべてのコンテンツに表示可能
    2. 関数 - 関数内 (およびそのサブ関数とブロック内) で表示されます
    3. ブロック - ブロック内 (およびそのサブブロック内) に表示されます
    4. モジュール - モジュール内に表示されます

    グローバル スコープとモジュール スコープの特殊な場合を除き、変数は var (関数スコープ)、let (ブロック スコープ)、および const (ブロック スコープ) を使用します。 ) 宣言。厳密モードでは、他のほとんどの形式の識別子宣言はブロック スコープを持ちます。

    ###概要###

    スコープは、識別子が有効なコード ベースの領域です。

    字句環境は、識別子名とそれに関連付けられた値の間のマッピングです。

    スコープは、リンクされた字句環境のネストによって形成され、各ネスト レベルは祖先実行コンテキストの字句環境に対応します。

    これらのリンクされた語彙環境は、スコープ「チェーン」を形成します。識別子の解決は、このチェーンに沿って一致する識別子を検索するプロセスです。

    識別子の解析は外部に対してのみ行われます。このように、外部の語彙環境は内部の語彙環境を「見る」ことができません。

    JavaScript で識別子の

    スコープ

    を決定する場合、次の 3 つの関連要素があります。 識別子の宣言方法

      識別子の宣言場所
    1. 厳密モー​​ド
    2. 非厳密モードかどうか
    3. 一部の識別子の宣言方法:

    var

      let
    1. 、および const 関数パラメータ キャッチブロックパラメータ
    2. 関数宣言
    3. 名前付き関数式
    4. グローバル オブジェクトで暗黙的に定義されたプロパティ (つまり、非厳密モードでは
    5. var
    6. が省略されます)
    7. インポートステートメント
    8. 評価
    9. 一部の識別子の宣言場所:
    グローバルコンテキスト

    関数本体
    1. 通常ブロック
    2. 制御構造の先頭 (ループ、if、while など)
    3. 制御構造
    4. モジュール
    5. 宣言スタイル
    6. var

    var

    を使用して宣言された識別子は、グローバル コンテキストで直接宣言されていない限り、関数スコープ

    を持ちます。その場合、それらはグローバル オブジェクトのプロパティとして追加され、グローバル スコープ領域を持ちます。 eval 関数での使用には別のルールがあります。 letとconst

    let

    および

    const

    を使用して宣言された識別子は、グローバル コンテキストで直接宣言されていない限り、ブロック スコープ を持ちます。グローバル コンテキストで直接宣言されている場合、グローバル スコープ を持ちます。 注: let

    const

    、および var はすべて昇格されます 。これは、定義の論理的な場所が、それを囲んでいるスコープ (ブロックまたは関数) の先頭にあることを意味します。ただし、let および const を使用して宣言された変数は、制御フローがソース コード内の宣言ポイントを通過するまで、読み取りまたは割り当てを行うことができません。この一時的な期間を一時的な不感帯と呼びます。 リーリー

    返事
    0
  • キャンセル返事