js-primer icon indicating copy to clipboard operation
js-primer copied to clipboard

`function` キーワードと関数式のうち推奨のものがあればそれを、ない場合はその旨明記してほしい

Open kangetsu121 opened this issue 3 years ago • 3 comments

該当ページ

など

リクエスト/提案内容

関数定義方法のうち、function キーワードと関数式のいずれを推奨するか明記いただけないでしょうか。
または、どちらも差がない場合は、それぞれの特徴をまとめたセクションを設けて「どちらでも良い」旨明記するのはいかがでしょうか。

背景

関数と宣言 のページで、function キーワードを使った関数宣言と関数式による定義方法をそれぞれ紹介しています。

同ページの [コラム] 同じ名前の関数宣言は上書きされるで、以下のように function キーワードや var を使った関数式での注意点を書いています。

この関数定義の上書きはfunctionキーワードでの関数宣言とvarキーワードを使った関数式のみで発生します。 letやconstでは同じ変数名の定義はエラーとなるため、このような関数定義の上書きもエラーとなります。

また、関数とスコープ ページの 関数宣言と巻き上げ でも、function キーワードと var での関数式の注意点を書いています。

functionキーワードによる関数宣言も巻き上げられます。 しかし、varによる変数宣言の巻き上げとは異なり、問題となることはほとんどありません。 なぜなら、実際に巻き上げられた関数を呼び出せるためです。

注意点として、varで宣言された変数へ関数を代入した場合はvarのルールで巻き上げられます。 そのため、varで変数へ関数を代入する関数式では、hello変数が巻き上げによりundefinedとなるため呼び出せません(「関数と宣言(関数式)」を参照)。

これら (や他の解説) を見ると、最も無難な関数定義方法は、巻き上げ、再定義、再代入を防げる const での関数式によるものに思えます (状況によっては let が必要なこともゼロではないかもしれません)。
function 文利用のデメリットは無視できる程度とも思いますが、初学者の混乱を避けるために推奨の手段を明記いただけないでしょうか。

初出の「関数と宣言」で推奨方法を書き、理由の理解は他の知識も必要なため別ページで後述、などだと指針が早めに定まるので初学者は安心しやすいと思います。

ご検討よろしくお願いします。

期待する結果

function 文と関数式のうち推奨する方法とその理由が明記されること。
または、どちらかを推奨するほどの差がないこととその理由が目立つ形で明記されること。

kangetsu121 avatar Nov 24 '21 13:11 kangetsu121

個人的にはconstでの関数式を使うことが多い(同じ変数名の定義はエラーとなるため)ですが、 そこまで差があるわけでもないという感じはしますね。結局両方使われているイメージです。(統一したいという人もいるのも見かけます)

cc @lacolaco

azu avatar Dec 21 '21 07:12 azu

僕も個人的には両方使うことがあって、どちらかを強く推奨できるほどの意見は持ち合わせていないです 

lacolaco avatar Dec 21 '21 10:12 lacolaco

お二人ともありがとうございました、推奨は特にないとのこと承知しました。 優先度は高くないと思いますが、可能であれば

どちらかを推奨するほどの差がないこととその理由が目立つ形で明記されること。

こちらご対応いただけると初学者には嬉しいと思いますので、ご検討よろしくお願いします。

kangetsu121 avatar Jan 01 '22 14:01 kangetsu121