JavaScript 変数のホイスティング
次の手順の結果はどうなりますか?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
<script type="text/javascript">
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
</script>
</head>
<body>
</body>
</html>結果が表示されます: 10
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
<script type="text/javascript">
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
</script>
</head>
<body>
</body>
</html>結果が表示されます: 1
ショックですよね?どうしたの?これは馴染みがなく、危険で、混乱を招くかもしれませんが、実際には非常に便利で印象的な JavaScript 言語機能である変数ホイスティングでもあります。
JavaScriptの初期化は昇格されません
JavaScript 宣言された変数のみが昇格され、初期化された変数は昇格されません。
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>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>2のyは、変数宣言(var y)は昇格されるが、初期化(y = 7)は昇格されないためです。 y 変数は未定義の変数です。
head で変数を宣言します
JavaScript 変数のホイスティングは、ほとんどのプログラマーには知られていません。
プログラマが変数プロモーションをよく理解していないと、作成したプログラムに問題が発生しやすくなります。
これらの問題を回避するために、通常は各スコープの開始前にこれらの変数を宣言します。これは通常の JavaScript 解析ステップでもあり、理解しやすいです。
新しいファイル
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<p id="demo"></p>
<script>
var x = 5.5; // 初始化 x
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = "x 为:" + x + ",y 为:" + y; // 显示 x 和 y
var y = 7; // 初始化 y
</script>
</body>
</html>
プレビュー
Clear
- おすすめコース
- コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜
このコースを視聴した生徒はこちらも学んでいます
















