arguments.callee实际上如何工作?

时间:2012-08-01 08:40:21

标签: jquery

我的代码有效:

$(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);
    }
});

1 个答案:

答案 0 :(得分:5)

在原始脚本中,您声明函数animateIt然后立即调用它,但是在修改后的脚本中,您声明了闭包而没有调用它。

您应该尝试更改此内容:

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

用这个:

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

也就是说,你们都在同一行上声明并调用闭包。

请记住,据我所知,arguments.calleearguments.caller的使用非常气馁,应该避免使用。