5

私はこのJavaScriptを持っています:

triggerAnimation(listItem,toggleToggleRadioListItem(listItem));


function triggerAnimation(listItem,passThruFunction){
    listItem.find(".inlineLoading").show();
// pause and then call the toggle function
    $("body").animate({opacity: 1}, 1000, 
    function(){
        alert("a");
    passThruFunction;
    }
    );  
}

function toggleToggleRadioListItem(listItem) {
    alert("b");
};

何が起こるはずです:

  • triggerAnimationは、オブジェクトと関数の受け渡しと呼ばれます
  • triggerAnimationはダミーアニメーションを実行し(一時停止を作成するため)、アラートを発生させ、渡された関数を実行するコールバック関数をトリガーします。
  • 渡された関数は、アラートの発生と呼ばれます。

上記に基づいて、アラートAがアラートBの前に表示されると思いますが、そうではありません。何が起こるかというと、triggerAnimation()が呼び出されるとすぐにアラートBが呼び出されるようです。何故ですか?どうすればその動作を実現できますか?

4

4 に答える 4

6

関数を渡して後で呼び出すことで、実行を遅らせることができます。

triggerAnimation(listItem, function () {
   toggleToggleRadioListItem(listItem)
});


function triggerAnimation(listItem,passThruFunction){
    listItem.find(".inlineLoading").show();
// pause and then call the toggle function
    $("body").animate({opacity: 1}, 1000, 
    function(){
        alert("a");
        passThruFunction();
    }
    );  
}

function toggleToggleRadioListItem(listItem) {
    alert("b");
};
于 2009-11-12T23:43:00.450 に答える
2

代わりに、関数参照とパラメーターの配列を渡してアニメーションをトリガーし、実行時にpassThruFunctionに渡すことができます。Javascriptでは、関数に渡すものは常に関数コードが実際に実行される前に評価されるため、最初にalert( "b")を取得します。それは[関数パラメータの]ビジー評価と呼ばれます、ところで。

于 2009-11-12T23:42:26.377 に答える
1

を呼び出すtoggleToggleRadioListItem(listItem)ときにを呼び出すため、最初triggerAnimation(listItem,toggleToggleRadioListItem(listItem));に実行されます。toggleToggleRadioListItem(listItem)

于 2009-11-12T23:41:49.377 に答える
1

eduffyの答えは、機能する可能性のある最も単純なものであり、おやつとして機能します。よりハードコアなものが必要な場合は、部分適用を静かに読むことで、ツールベルトに追加する別のテクニックが得られる可能性があります。

于 2009-11-12T23:49:38.610 に答える