JavaScript において、関数は「関数オブジェクト」というオブジェクトです。
javascript
1function add1(first, second) {
2 return first + second;
3}
というのは function 文といい、そのスコープに add1 という名前の関数オブジェクトを定義するものです。一方、function 式という記法があり、これによって関数オブジェクトを作ることができます。
javascript
1var add2 = function(first, second) {
2 return first + second;
3};
function 式も、JavaScript に普通に備わっている記法であり、jQuery や AngulerJS に特有の記法というわけではありません。
関数オブジェクトも通常のオブジェクトと同様に、変数に代入したり、関数の引数として使ったりできます。たとえば、
javascript
1function exec(func, first, second) {
2 return func(first, second);
3}
という関数を定義したときに、先の関数 add1 や add2 を使って
javascript
1console.log( exec(add1, 3, 4) ); // -> 7
2console.log( exec(add2, 2, 6) ); // -> 8
というように書くことができます。
イベントハンドラなどコールバック関数には特に関数名をつける必要がないので、
javascript
1console.log( exec(function(first, second) { return first - second; }, 5, 1 ); // -> 4
というような書き方をよくします。
他に、function 式は即時関数にもよく使われます。
javascript
1console.log( (function(first, second) { return first * second; })(3, 7) ); // -> 21
みたいな。
2016-04-27 追記
「function 文」という用語は正しくなく、「関数宣言」とすべき、とのご指摘をいただきました。
「function 式」の方もあわせて「関数式」と置き換えるとよさそうです。
詳しくは、関数と変数の巻き上げの違いとは - teratail に対する私の回答への think49 さんのコメントをご覧ください。
https://teratail.com/questions/33002
2016/04/26 23:23