📘
JavaScript / ファイルのトップレベルでの関数宣言 & アロー関数式
関数宣言の場合
メリット
- ホイスティングを利用して柔軟なコードを書ける(関数宣言がスコープ内のどこでも使用可能)
fn();
// > hoge
function fn(){
console.log("hoge")
};
- 一目で関数であると理解できる(functionキーワードから始まるため)
*ソースは見当たらなかったけど、Googleは関数宣言を推奨しているような記事を見かけたことがある
デメリット
- 再宣言可能
fn();
// > fuga
function fn() {
console.log("hoge")
};
function fn() {
console.log("fuga")
};
- thisの挙動が難しい(動的に変化するため)
アロー関数式の場合
メリット
- 関数の再宣言を防ぐ
const fn = () => {
console.log("hoge")
};
const fn = () => {
console.log("fuga")
};
fn();
// > Uncaught SyntaxError
// アロー関数式に限らず、funtionキーワードを利用した関数式を使えば同じ効果はあるけれど、アロー関数式の方が記述が簡素だし後述のメリットがある
- thisの挙動がわかりやすい(定義された時点で固定される)
- 記述が簡素
デメリット?(というか特徴?)
- プロトタイプを持たない
- argumentオブジェクトを持たない
- new演算子でインスタンス化できない
一見デメリットが無いような気も・・・
プロトタイプやargumentオブジェクトなんてモダンJSではほとんど使わないと思うし・・・
でも個人的にはファイルトップレベルでは関数宣言
確かにアロー関数は機能的に優れているけど、変数・定数宣言と関数宣言がストレスなく見分けられるfunctionキーワードでの関数宣言が好み
const greeting = "hello"
function saySomething(something){
console.log(something)
};
saySomething(greeting);
みんなはどっち?
Discussion