JavaScriptの関数について





JavaScriptの関数とは

function(ファンクション)のことで、簡単な例ととして書くと

1
2
3
function 関数名(){
処理内容
}

となる
よく使う処理を関数という形で定義して、使いたいとき呼び出せる
再利用ができて修正もしやすいメリットがある
次のように引数を渡すこともできる

1
2
3
4
function 関数名(引数){
処理内容
return 返り値;
}

関数リテラル(無名関数)

関数名をつけずに、関数を定義する
関数を変数に代入して、変数の記述で関数を実行する

1
2
3
var 変数名 = function(引数1、引数2){
returan 引数1 + 引数2;
}

1度しか使わない場合や、名前を付ける必要のないもの、
名前空間を汚さないために使う

即時関数

作成して、即実行できる関数
無名関数を()で囲み、最後にも、()をつけることで実行できる

1
2
3
(function () {
//処理
}());

引数や返り値を持つこともできる
使うメリットとしては、スコープ汚染を防ぐためで、閉じたスコープを作成できるので即時関数の中の変数はローカルな変数となる
ES6ではletやconstがあるのでそこまで使わないかもしれない

アロー関数

ES6で導入された関数で、=>を使って関数リテラルを記述する
functionを宣言する必要はなく、省略して書くことができる
returnするだけなら、returnとブロック({}のこと)を省略して書ける(一行だけの場合はreturnは自動で行われる)
引数が2つ以上なら引数に()がいるが引数が1つなら()を省略できる
引数が0なら空の丸括弧()がいる
コンストラクタ関数として使うことができない
宣言元(アロー関数が宣言された場所)のthisを参照する
その他色々とfunctionとの違いがあるが今回は表面だけにしておく

クロージャ

クロージャは、独立した (自由な) 変数を参照する関数です。言い換えるとクロージャ内で定義された関数は、自身が作成された環境を ‘覚えています(コピペ)
簡単にいうとスコープの外にある変数を参照できるということ
テクニックなので、使わなければ出来ないというものではない
JavaSCriptは関数を入れ子にできるので、関数の中に他の関数を定義できるのと、JavaScriptの関数は定義時のコンテキスト(文脈)で実行されて、関数は定義時のコンテキストとは異なるコンテキスト上に持ち出されるとクロージャになるらしい
ほぼコピペなので、使う時に又詳しく調べることにする
参考リンク
クロージャ(MDN)
ANALOGIC