JavaScript における変数のスコープは何ですか?
P粉696891871
P粉696891871 2023-08-21 15:35:39
0
2
399
<p>JavaScript における変数のスコープは何ですか?関数内と関数外のスコープは同じですか?それとも重要ですか?また、変数がグローバルに定義されている場合、それらはどこに保存されるのでしょうか? </p>
P粉696891871
P粉696891871

全員に返信(2)
P粉165522886

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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!