1. 変数
ECMAscript 変数はルーズ変数です。いわゆるルーズ変数とは、変数名が値を保存するための単なるプレースホルダーであることを意味します。
定義: var firstDemo;
2. 変数のスコープ
2.1 基本概念
var を使用して変数を定義する: 変数のスコープ内でローカル変数を定義するこの変数を定義する方法は、明示的宣言とも呼ばれます。
これが理解できない場合は、以下の単純かつ大雑把な例を見てください:
テスト();
関数テスト(){
var firstDemo="hello";//ローカル変数を定義します
alert(firstDemo);//こんにちは
}
テスト();
関数テスト(){
var firstDemo="hello" //ローカル変数 firstDemo を定義します
}
alert(firstDemo);//エラーレポート、firstDemo が定義されていません
上記の 2 つの例からわかるように、var を使用して関数内で変数を定義すると、その変数は関数の終了後に破棄されます。
変数を定義するには var を省略します。変数を定義する関数が 1 回呼び出されるだけで、変数はグローバル スコープでアクセスできます。変数を定義するこの方法は、暗黙的宣言
とも呼ばれます。
<スクリプトタイプ="text/javascript">
test();
alert(firstDemo); //こんにちは
関数 test(){
firstDemo="hello";
ヒント: 明示的に宣言された変数は、プリコンパイル中に呼び出し元オブジェクトにすでにコンパイルされています (たとえば、var t=1; プリコンパイル中に var t を実行; 解釈中に t=1 を実行)。これは、暗黙的に宣言された変数が定義されていないこととは異なります。解釈されるまではグローバル変数として扱われます。
変数のスコープをクリアすると、変数を合理的に宣言する方法を考えるのに役立ちます。これにより、不必要なメモリ オーバーヘッドが削減されるだけでなく、以前に定義された変数を上書きする変数の繰り返し定義によって引き起こされる問題も大幅に回避できます。
2.2 スコープ分析
<スクリプトタイプ="text/javascript">
関数デモ関数{
document.writeln(s)
}
var i=0; // グローバル変数を定義します
関数 test(){
デモ関数(i)
function innerFunction(){
var i = 1 //ローカル変数を定義します
デモ関数(i);
}
innerFunction();
デモ関数(i)
}
テスト();
出力結果: 0 1 0
コードをコピーします
document.writeln(s)
}
変数 i=0;
関数 test(){
demoFunction(i);
function innerFunction(){
demoFunction(i);
var i=1;
demoFunction(i);
}
innerFunction();
demoFunction(i);
}
テスト();
出力結果:
あ、0 0 1 0
B、0 未定義 1 0
C、0 エラー i が定義されていません
どの結果になるかは推測できます。理由はメッセージで詳しく説明されます。
上記はこの記事の全内容です。簡単に言えば、プログラミング言語における変数のスコープは非常に重要です。 JSの変数のスコープはJAVAやCなどの言語に比べて自由です。JSの変数にはブロックレベルのスコープがなく、関数内の変数は関数全体で有効であることが大きな特徴です。