ホームページ  >  記事  >  ウェブフロントエンド  >  jsでのスコープと関数クロージャの説明例

jsでのスコープと関数クロージャの説明例

小云云
小云云オリジナル
2018-03-07 10:58:481657ブラウズ

この記事では主に 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のスコープチェーンとプロトタイプチェーンとプロトタイプの継承

JSスコープチェーンとクロージャーの例の共有

JavaScriptスコープ クロージャーの詳しい説明

以上がjsでのスコープと関数クロージャの説明例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。