JavaScript 変数のホイスティング



JavaScript では、関数と変数の宣言は関数の先頭に昇格されます。

JavaScript では、変数は使用後に宣言できます。つまり、変数を最初に使用してから宣言できます。

次の 2 つのインスタンスは同じ結果を取得します:

インスタンス

<!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>

インスタンスの実行»

「インスタンスの実行」ボタンをクリックしてオンラインインスタンスを表示します

インスタンス

<!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 つのインスタンスの結果は異なります:

インスタンス

<!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>

インスタンスの実行»

「インスタンスの実行」ボタンをクリックしてオンラインインスタンスを表示します


インスタンス

りー

サンプルの実行»

[サンプルの実行] ボタンをクリックしてオンラインサンプルを表示します

インスタンス 2 の y は unknown を出力します。これは、変数宣言 (var y) が増加しているためですが、初期化 ( y = 7) は増加しません。そのため、y 変数は未定義の変数です。

例 2 次のようなコード:

<!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>

ヘッダーで変数を宣言します

JavaScript 変数のホイスティングは、ほとんどのプログラマーには知られていません。

プログラマが変数プロモーションをよく理解していないと、作成したプログラムに問題が発生しやすくなります。

これらの問題を回避するために、通常は各スコープの開始前にこれらの変数を宣言します。これは通常の JavaScript 解析ステップでもあり、理解しやすいです。

NoteJavaScript の厳密モードでは、宣言されていない変数の使用は許可されません。
次の章では、「厳密モード」について学びます。