<JS>関数宣言と関数式
210118:スコープ追加
code:関数宣言.js
function 関数名(仮引数1, 仮引数2) {
// 処理
// 処理
return 返り値;
}
//呼び出し
console.log(関数名(引数1,引数2));
//あとから式に代入できる
const 変数 = 関数名();
console.log(変数());//()をつけなければ普通のオブジェクトとして参照する
最初から式に代入して関数をつくる
code:関数式.js
const 変数<関数名> = function() {
// 処理
// 処理
return 返り値;
};
//呼び出し
console.log(変数<関数名>());
関数宣言
functionからはじまる文
function右辺の関数名は省略できない
巻き上げが発生する(実行するより後に書いても良い)
関数式
関数を値として扱う(関数リテラル)
function右辺の関数名は省略できる(無名関数)
↑つけてもいいけど、それを使って外部から呼び出せない
↑関数内部からは呼び出せる(再帰処理などに使う)
巻き上げは発生しない(定義より先に実行を記述できない)
スコープ
関数宣言で作られたfunctionはブロックスコープを認識しない。
code:scope01.js
{
function a(){
console.log('a!hi!');
}
}
a(); // a!hi!
関数式だとブロックスコープを認識する。(varだとダメだけど)
code:scope01.js
{
let a = function(){
console.log('a!hi!');
}
}
a(); // Uncaught ReferenceError: a is not defined
まとめ
どちらがいいとかはない。
コーディングルールに従う。