この記事では主に js のスコープと関数クロージャーの例を紹介します。 1. スコープは非常に簡単で、単純なクリックだけです。js のスコープにはブロックレベルのスコープはなく、グローバル スコープと関数スコープのみがあります。例:
if(true){ var a=100; } console.log(a);
Java または C では、中括弧はブロックの外では取得できないことを意味しますが、js では可能です。これは、
var a; if(true){ a=100; }
特殊なケース:
function Loga(){ a=100 } console.log(a);
ここでの a は関数内で var を使わずに直接宣言した場合も親スコープとみなされますが、一般的にはこのように書くことはお勧めしません。 、申告が必要です。
関数スコープの文字通りの理解は、関数内で定義された変数が関数内で機能するということです。
関数スコープとグローバルスコープの違いは、グローバルスコープ内の変数は関数スコープ内で呼び出したり変更したりできるということです。グローバル スコープは、関数スコープで定義された変数を呼び出すことはできません。ここでの定義は (変更されるかどうかにかかわらず) 非常に重要です。これは、変数が親スコープ内の変数に順番にアクセスできることを意味します。内側からはアクセスできますが、外側からはアクセスできません。
2. クロージャ
の概念の正確な定義はありません
a. 戻り値として渡される関数
例:
function F1(){ var a=100 return function(){ console.log(a);//a是自由变量 } } var a=200; var f=F1(); f();
これは典型的なクロージャのケースで、戻り値 f は関数であり、実行環境は F1 にあります。したがって、ここでの出力は 100 です。変数は親スコープ (F1) で検索する必要があります。
2 番目のケースでは、関数がパラメータとして渡されます
function F1(){ var a=100 return function(){ console.log(a); } } var a=200; var f=F1(); function F2(fn){ var a=300; fn(); } F2(f);
明らかに結果は同じで、理由は上記と同じで、実行環境はF2ですが、生成環境は親スコープのF1です F1なので出力は100のままです
関連推奨事項:以上がjsでのスコープと関数クロージャの説明例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。