JavaScript入門 練習問題 29:関数:デフォルト引数
次のコードの実行結果として正しいものはどれですか?
```javascript
function greet(name = 'ゲスト') {
console.log('こんにちは、' + name + 'さん');
}
greet();
greet('田中');
```
- 1回目は「こんにちは、ゲストさん」、2回目は「こんにちは、田中さん」
- 1回目は「こんにちは、undefinedさん」、2回目は「こんにちは、田中さん」
- 1回目はエラーが発生し、2回目は「こんにちは、田中さん」
- 1回目は「こんにちは、ゲストさん」、2回目はエラーが発生する
- 1回目も2回目も「こんにちは、ゲストさん」が出力される
正解と解説を見る
正解:1回目は「こんにちは、ゲストさん」、2回目は「こんにちは、田中さん」
関数の仮引数にデフォルト値を設定すると、引数が渡されなかった場合にそのデフォルト値が使われます。引数が渡された場合はその値が優先されます。
【正解の理由】
greet()は引数を渡していないため、nameにはデフォルト値の'ゲスト'が使われます。greet('田中')は引数を渡しているため、'田中'がnameに代入されます。
【不正解の理由】
• 「1回目は「こんにちは、undefinedさん」」:デフォルト引数が設定されている場合、引数省略時はundefinedではなくデフォルト値が使われる
• 「1回目はエラーが発生」:デフォルト引数のおかげで引数を省略してもエラーにはならない
• 「2回目はエラーが発生する」:引数を渡した場合はその値が正しく使われ、エラーにはならない
• 「1回目も2回目も「こんにちは、ゲストさん」」:引数を渡した場合はデフォルト値ではなく渡された値が優先される