JavaScript入門 練習問題 44:関数:定義と呼び出し順序
次のコードを実行したときの実行結果として正しいものはどれですか?
```javascript
console.log(multiply(2, 3));
function multiply(a, b) {
return a * b;
}
```
- 関数定義の前に呼び出しているためエラーになる
- 数値の「6」が計算されてコンソールに出力される
- undefinedが返され、コンソールに出力される
- 処理は無視され、コンソールには何も出力されない
- NaNという計算不能を示す結果がコンソールに出る
正解と解説を見る
正解:数値の「6」が計算されてコンソールに出力される
functionキーワードを用いた関数宣言は、コードの実行前にメモリに登録されるため、定義より前で呼び出しても正常に処理され、数値の「6」が計算されてコンソールに出力されます。
【正解の理由】
JavaScriptでは、functionキーワードで定義した関数はスコープの先頭に「巻き上げ(ホイスティング=コードの実行前に宣言がメモリに持ち上げられる挙動)」されます。そのため、関数定義の前に呼び出しを書いても正常に動作します。
【不正解の理由】
• 「関数定義の前に呼び出しているためエラーになる」という説明は誤り。関数の巻き上げにより正常に実行される
• 「undefinedが返され、コンソールに出力される」という説明は誤り。引数に2と3が渡され、正しく計算が行われる
• 「処理は無視され、コンソールには何も出力されない」という説明は誤り。エラーにならず関数の処理が実行される
• 「NaNという計算不能を示す結果がコンソールに出る」という説明は誤り。引数は正しく受け渡されるため、計算不能にはならない