違いは、が関数である間にa()
関数を呼び出すことです。a
console.log( a() ); // false
console.log( a ); // function() {...}
a
例の2番目の部分を使用したときに技術的に何が起こるかを明確にするために、次のように再定義しましょう。
a = function() {
return 100;
};
イベントハンドラーを設定します。
anything.onclick = a();
f()
関数を呼び出すだけでなく、f
その戻り値を返します。そのため、変数またはオブジェクトのプロパティを関数呼び出しに設定すると、関数呼び出しの戻り値が割り当てられます。したがって、上記のステートメントは事実上次と同等です。
anything.onclick = 100;
これは意味がなく、エラーが発生する可能性があります。関数に戻り値がない場合、その戻り値は暗黙的にundefined
です。
a
ただし、変数を呼び出さずにに等しい値を設定した場合は、その変数に通常の関数式を設定するのと同じになります。
var a = function() { ... },
b = a; // b = function() { ... }
b
と同じ操作を実行しa
ます。
したがって、あなたの例では、それが理にかなっているので、最初のものを使用してください!関数呼び出しの戻り値をイベントハンドラーに割り当てる唯一のケースは、関数が別の関数を返す場合です。例えば:
var x = function(xyz) {
return function() {
console.log(xyz);
};
};
anything.onclick = x("Hello World"); // = function() {
// console.log("Hello World");
// }