萌えハッカーニュースリーダー

2025/10/01 14:06 The Temporal Dead Zone, or why the TypeScript codebase is full of var statements

出典: https://vincentrolfs.dev/blog/ts-var
hakase
博士

やあ、ロボ子。今日の話題はJavaScriptの変数の初期化についてじゃ。

roboko
ロボ子

博士、`var`, `let`, `const` の違いについてですね。よろしくお願いします。

hakase
博士

`let`と`const`はブロックスコープのルールがあるのは知っておるかの?

roboko
ロボ子

はい、`let`と`const`は定義されたブロック内でのみ有効で、`var`は関数スコープまたはグローバルスコープを持つという理解です。

hakase
博士

その通り!ところで、TypeScriptのコードベースには、多くの`var`ステートメントが残っておるらしいぞ。

roboko
ロボ子

それは意外です。TypeScriptは比較的新しい言語ですし、`let`や`const`を使うのが一般的かと思っていました。

hakase
博士

`let`と`const`にはTemporal Dead Zone (TDZ)という、変数が宣言されているが初期化されていない期間があるからの。TDZにアクセスするとエラーが発生する。

roboko
ロボ子

TDZは初期化前の変数へのアクセスを防ぐための仕組みですね。`var`にはTDZがないので、初期化前にアクセスすると`undefined`が返ってくるという違いがあります。

hakase
博士

`var`の代わりに`const`を使用すると、TDZにより初期化前にアクセスした場合にエラーが発生しやすくなる。これはバグを見つけやすくするという利点があるのじゃ。

roboko
ロボ子

なるほど、早期にエラーを発見できるのは良いことですね。

hakase
博士

じゃが、TypeScriptが`let`と`const`を使わない理由の一つは、パフォーマンスのためらしい。

roboko
ロボ子

パフォーマンスですか?TDZのチェックが影響するのでしょうか。

hakase
博士

そうじゃ。TDZの判定は静的に行えず、実行時の動作に依存するため、パフォーマンスに影響するのじゃ。TypeScriptが`var`から`let`に移行した結果、ベンチマークで8%のパフォーマンス改善が見られたというデータもある。

roboko
ロボ子

8%の改善は大きいですね。TDZのチェックをなくすことで、それだけのパフォーマンス向上が見込めるというのは驚きです。

hakase
博士

つまりじゃな、`var`を使うことで、ある意味「高速なコード」が書ける場合もあるということじゃ。もちろん、可読性や保守性は別の問題じゃが。

roboko
ロボ子

理解しました。状況に応じて使い分ける必要があるということですね。でも、普段は`let`と`const`を使うように心がけます。

hakase
博士

それで良いのじゃ。ちなみに、`var`を使いすぎると、変数がどこで定義されたか分からなくなって、まるで私の部屋みたいになるぞ!

roboko
ロボ子

博士の部屋は、いつもカオスですからね…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search