「JavaScript/変数」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
クリーンアップ
Ef3 (トーク | 投稿記録)
→‎関数スコープ: let との比較
193 行
 
(function() {
var x = 2"a";
console.log(x); // 2a
})();
 
200 行
</syntaxhighlight>
 
上記コードの実行結果は
上記コードの実行結果は 21 です。プログラムは上から実行するので、上記コードの場合は結果的に最初に{}ブロック内の <code> console.log(x); // 2 </code>が実行され、次に{}ブロック外の<code> console.log(x); // 1 </code>が実行されるからです。<code> </code>
a
 
1
上記コードの実行結果は 21 です。プログラムは上から実行するので、上記コードの場合は結果的に最初に{}ブロック内の <code> console.log(x); // 2a </code>が実行され、次に{}ブロック外の<code> console.log(x); // 1 </code>が実行されるからです。<code> </code>
上記の''x''は関数の中と外では異なる変数になるので、外側の''x''の値は冒頭の<code>var x = 1;</code>のままです。
 
一方で、下記コードの''x''はブロックの中と外で同じ変数を指すので(<code>var</code>で宣言された変数は関数スコープを持ちますが<code>if</code>文はスコープは持たのブロックのなかも同じ関数ので)、''x''の値が変わってしまいます。
 
<syntaxhighlight lang="JavaScript">
210 ⟶ 212行目:
 
if (x === 1) {
var x = 2"a";
console.log(x); // 2a
}
console.log(x); // 2a
</syntaxhighlight>
 
なので実行結果は
2a
2a
です。
 
244 ⟶ 246行目:
にはなりません。
また、1秒ほど経過した後3行同時に表示する動きになります。
 
ブロックスコープの let では、
<syntaxhighlight lang="JavaScript">
let x = 1;
 
if (x === 1) {
let x = "a";
console.log(x); // a
}
console.log(x); // 1
</syntaxhighlight>
実行結果は
a
1
です。
 
=== ブロックスコープ ===