我有一个脚本可以计算一个方框中的数字(实际上,在本练习中 - > http://jqexercise.droppages.com/#page_0022_),每1秒就像这样。
var target = $("#target input");
var countUp = function(){
target.val(parseInt(target.val())+1);
setTimeout(countUp,1000); // this line
};
countUp();
我的问题是,当我在countUp
标记的行上将countUp()
更改为// this line
时,它会立即计数到15616.这些之间有什么区别?
答案 0 :(得分:3)
countUp
将该函数作为对象引用。在JavaScript中,一切都是一个对象,包括函数,并且可以传递。 countUp()
调用函数countUp
并返回其值。
答案 1 :(得分:2)
将()
添加到函数中会立即调用它,而仅使用函数名实际上是将其作为参数传递。
答案 2 :(得分:1)
countUp()
是函数的递归调用。每次调用函数都会立即再次调用它,并且返回值(undefined
)将传递给setTimeout。
这将是一个无限循环,除了我认为接收非函数的setTimeout
的异常在1秒后中断它,导致在15616停止。
答案 3 :(得分:1)
简而言之,setTimeout(countUp,1000);设置每隔n秒以毫秒为单位执行计数功能的时间。在这种情况下,这将是1秒。 countup只是作为参数传递到setTimeout函数中。