以前に関数を定義した場合、成功のコールバックに使用することを指定するときに括弧を含める必要がありますか?
私がした場合の違いは何ですか?
のように
function fish_food(){//do something}
$.ajax({
url: '/',
success: fish_food
});
また
$.ajax({
url: '/',
success: fish_food()
});
以前に関数を定義した場合、成功のコールバックに使用することを指定するときに括弧を含める必要がありますか?
私がした場合の違いは何ですか?
のように
function fish_food(){//do something}
$.ajax({
url: '/',
success: fish_food
});
また
$.ajax({
url: '/',
success: fish_food()
});
fish_food
単独で (括弧なしで) 関数オブジェクトへの参照として機能します。これにより、後で呼び出されるように関数への参照を渡すことができます。
fish_food()
(括弧付き) は、関数を実行させる関数呼び出し式です。関数コードが評価され、オプションで値が返されて実行されます。
提供した AJAX コード (およびコールバックを含むすべての非同期 JavaScript) を使用して、fish_food
バージョン (括弧なし) を使用する必要があります。これにより、成功関数への参照が AJAX コードに渡され、AJAX コードがサーバーへの往復を完了すると、非同期的に実行されます。
いいえ。
括弧は、関数fish_food
をすぐに実行する必要があり、値をsuccess
プロパティに返す必要があることをブラウザに通知します。
ノーパレンバージョンが必要です。その理由は、括弧はJavaScriptに名前で関数を参照するのではなく、すぐに関数を実行するように指示しているため、success
コールバックは実際にfish_food()
はAJAX呼び出しを実行しているときはいつでも呼び出した結果になります(これはおそらくエラーになります)undefined
)。
これはうまくいくでしょう
$.ajax({
url: '/',
success: fish_food
});
かっこは必要ありません。parensを使用すると関数が呼び出されます。必要なのは、C /C++の関数ポインターに相当する名前だけです。
括弧を付けると、関数がその場で実行されます。そのため、最初のバージョンが必要です。そうでない場合、成功すると関数の戻り値が格納されます。
$.ajax({
url: '/',
success: fish_food
});
正しい。
を使用するsuccess: fish_food()
と、すぐに実行され、リターンは成功に設定されます。