0

私は動作するこのコードを持っています:

$(document).ready(function() {
    $("#run").click(function() {
        $("div:animated").toggleClass("colored");
    });

    function animateIt() {
        $("#mover").slideToggle("slow", animateIt);
    }
    animateIt();
});

関数自体を呼び出すのでarguments.callee、関数の名前は必要ありません。したがって、これも機能するはずですが、機能しません。誰でも理由を教えてもらえますか?

$(document).ready(function() {
    $("#run").click(function() {
        $("div:animated").toggleClass("colored");
    });

    function() {
        $("#mover").slideToggle("slow", arguments.callee);
    }
});
4

1 に答える 1

5

元のスクリプトでは、関数を宣言してanimateItからすぐに呼び出しますが、変更されたスクリプトでは、関数を呼び出すことなくクロージャーを宣言します。

これを変更してみてください:

function() {
  $("#mover").slideToggle("slow",arguments.callee);
}

これとともに:

(function() {
  $("#mover").slideToggle("slow",arguments.callee);
})();

つまり、同じ行でクロージャーの宣言と呼び出しの両方を行います。

私の知る限り、arguments.calleeandの使用arguments.callerは非常に推奨されておらず、避けるべきであることを覚えておいてください。

于 2012-08-01T08:45:28.410 に答える