一个简单的问题:我为什么要这样做
var start = function() {
$('#element').animate({}, 5000, 'linear', start);
}
但不是这个
function start() {
$('#element').animate({}, 5000, 'linear', start());
}
第一个完美无缺,完成后重新启动动画。第二个简单地导致无限循环。
答案 0 :(得分:8)
使用
function start() {
$('#element').animate({}, 5000, 'linear', start);
}
或
function start() {
$('#element').animate({}, 5000, 'linear', function(){ start(); });
}
第二种情况非常有用,如果你想实际传递一些参数来启动..
答案 1 :(得分:4)
这是因为在第一个发送函数的命名空间时,当你将()添加到函数名的末尾时它会立即执行函数
答案 2 :(得分:4)
在你的第二个函数中,你正在执行函数而不是传递对函数的引用,因此它将进入无限循环。
更改您的第二个功能:
function start() {
$('#element').animate({}, 5000, 'linear', start());
}
到
function start() {
$('#element').animate({}, 5000, 'linear', start); //Notice the change to start
}
答案 3 :(得分:3)
在第二个示例中,您基本上是对start()
进行递归调用。
您要做的是传递函数start本身,就像您在第一个示例中所做的那样。您的第二个示例仅提供调用start()
的结果。
答案 4 :(得分:2)
在第二种情况下,您直接调用该函数,而不是将其作为参数传递。
start()
会立即调用start,并将其返回值传递给.animate()
。这会导致无限的自递归。