JavaScript 変数のホイスティング
JavaScript では、関数と変数の宣言は関数の先頭に昇格されます。
JavaScript では、変数は使用後に宣言できます。つまり、変数を最初に使用してから宣言できます。
次の 2 つのインスタンスは同じ結果を取得します:
インスタンス 1
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> x = 5; // 变量 x 设置为 5 elem = document.getElementById("demo"); // 查找元素 elem.innerHTML = x; // 在元素中显示 x var x; // 声明 x </script> </body> </html>
プログラムを実行して試してください
インスタンス 2
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> var x; // 声明 x x = 5; // 变量 x 设置为 5 elem = document.getElementById("demo"); // 查找元素 elem.innerHTML = x; </script> </body> </html>
プログラムを実行して試してみてください
上記の例を理解するには、「巻き上げ(変数の巻き上げ)」を理解する必要があります。
変数の昇格: 関数宣言と変数宣言は、インタープリターによって常に静かにメソッド本体の先頭に「昇格」されます。
JavaScriptの初期化は昇格されません
JavaScriptで宣言された変数のみが昇格され、初期化された変数は昇格されません。
次の 2 つの例では、異なる結果が得られます:
インスタンス 1
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> var x = 5; // 初始化 x var y = 7; // 初始化 y elem = document.getElementById("demo"); // 查找元素 elem.innerHTML = x + " " + y; // 显示 x 和 y </script> </body> </html>
プログラムを実行して試してください
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> var x = 5; // 初始化 x elem = document.getElementById("demo"); // 查找元素 elem.innerHTML = "x 为:" + x + ",y 为:" + y; // 显示 x 和 y var y = 7; // 初始化 y </script> </body> </html>
プログラムを実行して試してください
インスタンス 2 の y は未定義を出力します。これは、変数宣言 (var y) はプロモートされますが、初期化 (y = 7) はプロモートされないため、変数 y は未定義変数になります。
ヒント
head で変数を宣言します
JavaScript 変数のホイスティングは、ほとんどのプログラマーには知られていません。
プログラマが変数プロモーションをよく理解していないと、作成するプログラムに問題が発生しやすくなります。
これらの問題を回避するために、通常は各スコープの開始前にこれらの変数を宣言します。これは通常の JavaScript 解析ステップでもあり、理解しやすいです。