一人前エンジニア道場

実務型コーディング演習 / 約15分

バグ修正②: 未初期化変数とスコープ

なぜこれを学ぶか

「変数を使う前に初期化していない」「スコープが思ったと違う」バグは、エラーメッセージが分かりにくく原因特定が難しいです。代表パターンを体で覚えましょう。

未初期化変数: JavaScript では宣言したが値を代入していない変数は undefined です。undefined に対して算術演算すると NaN(Not a Number)になります。NaN + 1 = NaN のように、一度 NaN が混入すると計算結果が全て NaN になる「NaN汚染」が起きます。

let count は let count = 0 と同じではありません。合計・カウントなどの累積変数は 必ず初期値を設定 しましょう(let sum = 0、let count = 0)。

スコープの落とし穴: if や for の中で let / const で宣言した変数は、そのブロック({})の外からは見えません。ブロックの外でも使いたい変数は、外側で宣言してください。

var は使わない: var は関数スコープで巻き上げ(hoisting)が起きるため、意図しない動作の原因になります。現代のJavaScriptでは let / const を使いましょう。

重要ポイント

  • 累積変数は必ず初期値を設定(sum = 0、count = 0)
  • NaN が混入すると全計算結果が NaN になる
  • let/const はブロックスコープ。ブロック外で使う変数は外で宣言

理解度チェック

選ぶと即座に解説が表示されます。

`let result; result += 5;` を実行すると result の値は?

ヒントを見る

`let result` で宣言した直後、result の値は何でしょう? その値に 5 を足すとどうなりますか?

コーディング演習実際に書く

以下の `getStats` 関数には「未初期化変数」のバグがあります。数値配列の合計(sum)と平均(avg)を正しく計算して返すよう修正してください。

function getStats(nums)

スキルセルフチェック

このレッスンの内容をどの程度理解できましたか?