javascript
1$("form").change(showValues);
において、change()
に渡しているのは関数オブジェクトです。
javascript
1function add2(x) {
2 return x + 2;
3}
という整数を引数にとる関数があったとして、
javascript
1console.log(add2(3)); // (1) add2() にリテラルの整数を渡す
2var y = 3;
3console.log(add2(y)); // (2) add2() に変数に入った整数を渡す
のように、「整数リテラル」あるいは「変数に入った整数」で実引数を渡せますが、関数を引数にとるような関数でも同じようなことができます。
javascript
1function execTwice(func) {
2 console.log([func(1), func(2)];
3}
てな感じの関数があったとして、
javascript
1execTwice(function(x) { return x * 2; }); // (1) execTwice() にリテラルの関数を渡す
2var sub2 = function(x) { return x - 2; };
3execTwice(sub2); // (2) execTwice() に変数に入った関数を渡す
というように「関数リテラル」あるいは「変数に入った関数」を、実引数として関数 (execTwice
) に渡せます。
また、関数の場合は、先の add2()
のようにfunction文で定義した関数を名前で渡すことができます (sub2
の方はfunction式 で定義)。
javascript
1execTwice(add2); // (3) execTwice() に function 文で定義した関数を渡す
ご質問に戻りますと、change()
に渡している showValues
は、「function文で生成された関数オブジェクトが代入された変数」か「function 式で定義された関数名」かのいずれかです。
誤解されているかもしれないので念のため付け加えておきますが、ご質問に書かれていた「カッコあり」の方も、change() に渡しているものは関数呼び出しではありません。関数の定義です。関数の呼び出しは通常、関数オブジェクトの後ろに ()
をつけて呼び出すものです。(showValues() は関数の呼び出し)
2016-04-27 追記
「function 文」という用語は正しくなく、「関数宣言」とすべき、とのご指摘をいただきました。
「function 式」の方もあわせて「関数式」と置き換えるとよさそうです。
詳しくは、関数と変数の巻き上げの違いとは - teratail に対する私の回答への think49 さんのコメントをご覧ください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/27 16:05
2016/03/28 00:23 編集
2016/03/28 00:49 編集