主な内容の要点
JavaScriptのtry...catchは、関数の中で発生したエラーも呼び出し元のtry...catchで捕まえられる。ただし、非同期処理(例:setTimeout)の中で起きたエラーは捕まえられないので注意が必要。
ポイント解説
- 基本の仕組み
try...catchは、tryブロック内でエラーが発生するとcatchに処理が移る。tryの中で呼び出した関数内でエラーが起きても、呼び出し元のcatchで処理できる。
- 例:通常の関数呼び出し
function sum(a, b) {
return a + b;
}
try {
console.log(sum(10, 8)); // OK
console.log(sum(10, 8n)); // BigIntとNumberを混ぜてエラー
} catch (e) {
console.error(e); // エラーをキャッチ
}
JavaScript→ 関数内で起きたエラーも、呼び出し元のcatchで処理できる。
- 関数が入れ子になっていても同じ
- 関数A → 関数B → エラー発生、という流れでも、最終的に呼び出した側の
try...catchで捕まえられる。
- 関数A → 関数B → エラー発生、という流れでも、最終的に呼び出した側の
- 非同期処理の注意点
setTimeoutなどのコールバック関数内で発生したエラーは、外側のtry...catchでは捕まえられない。
try {
setTimeout(() => {
// ここでエラーが起きても外側ではキャッチできない
console.log(10 + 8n);
}, 1000);
} catch (e) {
console.error("キャッチできない");
}
JavaScript→ 実行すると「Uncaught TypeError」として処理が止まる。
初心者が覚えるべきこと
- 同期処理の関数内エラーは呼び出し元でキャッチできる
- 非同期処理のエラーは外側の
try...catchでは捕まえられない
→ 非同期処理では、コールバック内でtry...catchを書く必要がある。 - BigIntとNumberを混ぜるとエラーになるなど、型の違いにも注意。
初心者向けにまとめると、「関数の中でエラーが起きても呼び出し元でキャッチできる。ただし非同期処理は別!」というのが最大のポイントです。
このあたりを理解すると、エラー処理の仕組みがグッと分かりやすくなります。

