84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
JavaScript はスコープ チェーンを使用して、特定の関数のスコープを決定します。通常はグローバル スコープがあり、定義された各関数には独自のネストされたスコープがあります。別の関数内で定義された関数には、外部関数にリンクされたローカル スコープがあります。これは常に、スコープが定義されるソース コード内の場所です。
スコープ チェーン内の要素は、基本的には親スコープへのポインターを持つマップです。
変数を解析するとき、JavaScript は最も内側のスコープから開始して外側に向かって検索します。
JavaScript には、字句 (静的とも呼ばれる) スコープとクロージャがあります。これは、ソース コードを確認することで識別子のスコープを決定できることを意味します。
4 つのスコープは次のとおりです:
グローバル スコープとモジュール スコープの特殊な場合を除き、変数は var (関数スコープ)、let (ブロック スコープ)、および const (ブロック スコープ) を使用します。 ) 宣言。厳密モードでは、他のほとんどの形式の識別子宣言はブロック スコープを持ちます。
var
let
const
字句環境は、識別子名とそれに関連付けられた値の間のマッピングです。
スコープは、リンクされた字句環境のネストによって形成され、各ネスト レベルは祖先実行コンテキストの字句環境に対応します。
これらのリンクされた語彙環境は、スコープ「チェーン」を形成します。識別子の解決は、このチェーンに沿って一致する識別子を検索するプロセスです。
識別子の解析は外部に対してのみ行われます。このように、外部の語彙環境は内部の語彙環境を「見る」ことができません。
JavaScript で識別子の
を決定する場合、次の 3 つの関連要素があります。 識別子の宣言方法
インポート
評価
一部の識別子の宣言場所:
を持ちます。その場合、それらはグローバル オブジェクトのプロパティとして追加され、グローバル スコープ領域を持ちます。 eval 関数での使用には別のルールがあります。 letとconst
eval
を使用して宣言された識別子は、グローバル コンテキストで直接宣言されていない限り、ブロック スコープ を持ちます。グローバル コンテキストで直接宣言されている場合、グローバル スコープ を持ちます。 注: let、
を使用して宣言された識別子は、グローバル コンテキストで直接宣言されていない限り、ブロック スコープ
、および var はすべて昇格されます 。これは、定義の論理的な場所が、それを囲んでいるスコープ (ブロックまたは関数) の先頭にあることを意味します。ただし、let および const を使用して宣言された変数は、制御フローがソース コード内の宣言ポイントを通過するまで、読み取りまたは割り当てを行うことができません。この一時的な期間を一時的な不感帯と呼びます。 リーリー
はすべて昇格されます
JavaScript はスコープ チェーンを使用して、特定の関数のスコープを決定します。通常はグローバル スコープがあり、定義された各関数には独自のネストされたスコープがあります。別の関数内で定義された関数には、外部関数にリンクされたローカル スコープがあります。これは常に、スコープが定義されるソース コード内の場所です。
スコープ チェーン内の要素は、基本的には親スコープへのポインターを持つマップです。
変数を解析するとき、JavaScript は最も内側のスコープから開始して外側に向かって検索します。
TLDR
JavaScript には、字句 (静的とも呼ばれる) スコープとクロージャがあります。これは、ソース コードを確認することで識別子のスコープを決定できることを意味します。
4 つのスコープは次のとおりです:
グローバル スコープとモジュール スコープの特殊な場合を除き、変数は
###概要###var
(関数スコープ)、let
(ブロック スコープ)、およびconst
(ブロック スコープ) を使用します。 ) 宣言。厳密モードでは、他のほとんどの形式の識別子宣言はブロック スコープを持ちます。スコープは、識別子が有効なコード ベースの領域です。
字句環境は、識別子名とそれに関連付けられた値の間のマッピングです。
スコープは、リンクされた字句環境のネストによって形成され、各ネスト レベルは祖先実行コンテキストの字句環境に対応します。
これらのリンクされた語彙環境は、スコープ「チェーン」を形成します。識別子の解決は、このチェーンに沿って一致する識別子を検索するプロセスです。
識別子の解析は外部に対してのみ行われます。このように、外部の語彙環境は内部の語彙環境を「見る」ことができません。
JavaScript で識別子の
スコープを決定する場合、次の 3 つの関連要素があります。 識別子の宣言方法
識別子の宣言場所-
厳密モード- か
非厳密モードかどうか-
一部の識別子の宣言方法:
var
、let- 、および
関数パラメータ
キャッチブロックパラメータ
- 関数宣言
- 名前付き関数式
- グローバル オブジェクトで暗黙的に定義されたプロパティ (つまり、非厳密モードでは
var- が省略されます)
-
-
グローバルコンテキストconst
インポート
ステートメント評価
一部の識別子の宣言場所:
を持ちます。その場合、それらはグローバル オブジェクトのプロパティとして追加され、グローバル スコープ領域を持ちます。
leteval
関数での使用には別のルールがあります。 letとconstおよび
constを使用して宣言された識別子は、グローバル コンテキストで直接宣言されていない限り、ブロック スコープ
を持ちます。グローバル コンテキストで直接宣言されている場合、グローバル スコープ を持ちます。、および
リーリー
var
はすべて昇格されます
。これは、定義の論理的な場所が、それを囲んでいるスコープ (ブロックまたは関数) の先頭にあることを意味します。ただし、let
および const を使用して宣言された変数は、制御フローがソース コード内の宣言ポイントを通過するまで、読み取りまたは割り当てを行うことができません。この一時的な期間を一時的な不感帯と呼びます。