2012-08-01 97 views
0

我有这样的代码,其工作原理:arguments.callee如何实际工作?

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

这是无效的JavaScript。你必须给你的函数声明一个名字。 – Esailija 2012-08-01 08:45:06

+0

@Esailija,需要引用。看起来像一个[从未使用过的匿名函数声明](http://stackoverflow.com/a/11755677/7724)。 – bzlm 2012-08-01 08:46:59

+1

声明变量名为“参数”在哪里? – 2012-08-01 08:47:31

回答

5

在最初的剧本,你声明函数animateIt然后立即调用它,但在修改后的脚本,你宣布关闭而没有调用它。

你应该尝试改变这一点:

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

与此:

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

也就是说,你既声明,并呼吁在同一行关闭。

请记住,据我所知,使用arguments.calleearguments.caller是相当不鼓励,应该避免。

+2

你完成写作之前,我有一半,有一个免费的[小提琴](http://jsfiddle.net/HAjhF/)。 – 2012-08-01 08:47:17

+0

好吧,谢谢你=),它也可以工作! – 2012-08-01 09:28:34