関数がreturn文を書き忘れてundefinedを返してしまう
計算結果を変数に入れても、return文で明示的に返さない限り、関数はundefinedを返します。JavaScriptは他言語と違い、最後に評価した式を自動で返すことはありません。
なぜエラーが出ないのか
出力: undefined
(エラーなし)- JavaScriptは何も報告しません。文法として正しいためです
出力: undefined- 実際の挙動 — 期待した結果と食い違っている箇所
見つけ方- エラーが出ないので、出力を目で確かめるか、コードを目で追うしかありません。この種の誤りが最も発見が遅れます
このエラーが出る典型パターン
パターン1
1 function double(n) { 2 const result = n * 2; 3 ^ 4 } 5 console.log(double(4));
出力: undefined期待: 8 (エラーにはなりません)
return文が無いと、計算した値は関数の外に返されずundefinedになります。
直し方: (空) を return result; にします。
広告
広告スロット(未設定)
パターン2
1 function square(n) { 2 const result = n * n; 3 ^ 4 } 5 console.log(square(5));
出力: undefined期待: 25 (エラーにはなりません)
resultを計算しても、return文が無ければ呼び出し側には渡りません。
直し方: (空) を return result; にします。
パターン3
1 function greet(name) { 2 const message = "Hi " + name; 3 ^ 4 } 5 console.log(greet("Al"));
出力: undefined期待: Hi Al (エラーにはなりません)
messageを組み立てても、returnしなければ関数の戻り値はundefinedのままです。
直し方: (空) を return message; にします。
よくある誤解
「最後に書いた変数が自動的に返されるはず」という思い込みは誤りです。値を返すには必ずreturn文が必要で、書き忘れても構文エラーにはならないため気づきにくいバグになります。
まとめ
関数がreturn文を書き忘れてundefinedを返してしまうは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。