メモ

undefinedも(ECMA-262によれば)値のひとつなので、原文から少し離れますが、

値を返すためには、返す値を指定する return 文が関数内になくてはなりません (new キーワードとともに constructor が呼び出される特別なケースを除きます)。値を返さない関数は undefined を返します。

意味のある値を返すためには、返す値を指定する return 文が関数内になくてはなりません。return で明示的に値を返していない関数は undefined を返します (new キーワードとともに constructor が呼び出された場合は特別で、constructor で明示的に値を返さなかった場合、new 演算子式の値は、新しく作られたオブジェクトになります)。

以下も少し意訳になりますが、

関数呼び出しにおけるパラメータは、関数の引数 (arguments)です。引数は、関数に値によって渡されます。関数が引数の値を変更しても、その変更はグローバルスコープもしくは呼び出し元の関数内に反映されません。オブジェクト参照も値ですが、こちらは特別です: 参照されているオブジェクトのプロパティを関数が変更すると、次の例にあるように、その変更を関数の外部からみることができます:

関数の仮引数(パラメータ)には、関数呼び出しにおいて実引数 (アーギュメント) が渡されます。実引数は、関数に「値渡し」されます: 関数の中で引数の値を変更しても、その変更はグローバルスコープもしくは呼び出し元の関数内には反映されません。オブジェクト参照も「値」ですが、こちらは特別です: 参照されているオブジェクトのプロパティを関数の中で変更すると、次の例にあるように、その変更を関数の外部から見ることができます: