1.JavaScript変数のスコープ
JavaScriptでは変数は主にローカル変数とグローバル変数の2種類に分けられ、対応するスコープもローカルスコープとグローバルスコープになります。
1 ローカル変数とスコープ
ローカル変数は通常、関数本体内で宣言され、使用されます。
function func(){ var i=12;//ローカル変数...}ローカル変数のスコープは、変数が宣言されている関数の本体内で使用されます。
ローカル変数の宣言サイクルは、関数が呼び出されて実行されるときに初期化され、関数呼び出しが完了すると破棄されます。
2. グローバル変数とスコープ
グローバル変数は通常、関数本体の外で宣言されます。
var i=12;//グローバル変数関数 func(){......}宣言せずに直接使用され、デフォルトでグローバル変数となる変数もあります。
function func(){ i=12;//宣言されていない (var キーワードを使用して宣言されている)、デフォルトはグローバル変数}グローバル変数は、現在のページのすべてのスクリプトとメソッドで使用でき、そのスコープは現在のページのスクリプト内にあります。
グローバル変数の宣言サイクルは、変数が初期化されるときに作成され、現在のページが閉じられるときに破棄されます。
2. キーワードの種類
typeof キーワードは主に変数のデータ型を検出するために使用されます。JavaScript の主なデータ型は文字列、数値、ブール値、オブジェクトなどです。
console.log(typeof 'str');//stringconsole.log(typeof 23);//numberconsole.log(typeof false);//booleanconsole.log(typeof [1,3,12]);//オブジェクトコンソール。 log(typeof {name:'jack',age:12});//objectconsole.log(typeof new Date());//object注: js の配列と json オブジェクトはすべてオブジェクト データ型です。
3. null および未定義
Null と unknown は JavaScript でよく使用され、変数の値が空であるか、変数が定義されていないことを示します。値を表現する場合、null 値として表現することもできますが、やはりデータ型が異なります。
console.log(typeof null);//objectvar persion = null;console.log(persion);//nullconsole.log(typeof unknown);//unknownvar persion2;console.log(persion2);//未定義
null のデータ型は object であり、unknown のデータ型は未定義です。
変数が宣言されている場合、値は null であり、変数が宣言されているだけで代入されていない場合、値は未定義です。
別の比較セットを見てみましょう。
console.log(null==未定義);//真の値は等しい console.log(null===未定義);//偽の型は等しくない
null と undefined が値を表す場合、両方とも空を表し、null のデータ型はオブジェクトであり、unknown のデータ型は未定義であることがわかります。初期化せずに宣言された値は未定義です。
以下補足です
状況 1
<script> var i; // グローバル変数 // メソッド名は Camel 命名法です // メソッド内の変数はローカル変数です function SayHello(){ var x=100; } / /Output 100 alter(x); //x はローカル変数でアクセスできないため、エラーが報告されます。</script>状況 2
<script>function SayHello(){ var x=100; if(x==100){ var y=x+1 } // 101 も出力します。メソッド内には、C# では不可能なブロック レベルのスコープがありません。 ! ! for(var i=0;i<2;i++){alert(i) } //for ループで定義された変数はブロックレベルのスコープです alter(i) //i はローカル変数であるため、2 が出力されます。 }sayHello();</script>注: 変数は使用前に var で宣言する必要はありませんが、このような変数は「グローバル変数」とみなされますが、このように使用されることはほとんどありません。
未定義とnullについて
以下の場合、変数の値は不定となります。
1. 変数が定義されていても値が割り当てられていない場合、変数の値は未定義です。
2. 呼び出されたメソッドには戻り値がなく、戻り値は未定義です。
3. オブジェクトの属性値が存在しない場合、戻り値は次のように未定義になります: document.ddd
例1:
var xx;var yy=null;if(xx==yy){ アラート('等しい');}else{ アラート('等しくない');}if 判定を行う際、ブラウザは xx と yy の値を判定するため、出力結果は同じになります。どちらも具体的な値を持たないため、偽とみなします。
if 判定を ===[すべて等号] に置き換えると、出力は等しくなくなります。 === は、xx と yy のデータ型と値が同じでなければならないことを意味するためです。
例2:
var xx=10var yy='10';if(xx==yy){ アラート('等しい');}else{ アラート('等しくない');}=== に変更すると、出力は等しくなくなります。
例3:
var n='10';switch(n){ ケース 10: アラート('番号'); ケース '10': アラート('文字列');出力文字列
スイッチでの判断はタイプを考慮する必要があります
概要: if の判定は型に関係なく値を判定します。