0

我有一个脚本,可以像这样每 1 秒计算一个框中的数字(实际上,在这个练习中 - > http://jqexercise.droppages.com/#page_0022_ )。

var target = $("#target input");
var countUp = function(){
    target.val(parseInt(target.val())+1);   
        setTimeout(countUp,1000);          // this line
};

countUp();

我的问题是,当我更改countUpcountUp()我标记的行时// this line,它立即计数到 15616。它们之间有什么区别?

4

4 回答 4

3

countUp将函数作为对象引用。在 JavaScript 中,一切都是对象,包括函数,并且可以传递。countUp()调用函数countUp并返回它的值。

于 2013-06-05T21:09:52.477 回答
2

向函数添加()会立即调用它,而仅使用函数名实际上是将其作为参数传递。

于 2013-06-05T21:07:26.780 回答
1

countUp()是函数的递归调用。对函数的每次调用都会(立即)再次调用它,并将返回值(即undefined)传递给 setTimeout。

这将是一个无限循环,但我相信setTimeout接收非函数的异常会在 1 秒后中断它,导致在 15616 处停止。

于 2013-06-05T21:08:26.773 回答
1

简而言之, setTimeout(countUp, 1000); 设置每第 n 秒执行一次 countup 函数的时间(以毫秒为单位)。在这种情况下将是 1 秒。countup 只是作为参数传递到这里的 setTimeout 函数中。

于 2013-06-05T22:25:07.167 回答