gpt4 book ai didi

javascript - 将函数传递给方法时,为什么使用匿名函数容器而不只是原始函数可以工作?

转载 作者:行者123 更新时间:2023-11-28 15:51:03 24 4
gpt4 key购买 nike

我是 JavaScript 新手,正在搞乱递归计时事件。以下代码仅在新行上打印倒计时的下一个数字,直到达到 limit 为止。 jsfiddle here 上的版本.

function countdown(limit,initial,period){
if (initial>=limit){
document.getElementById('tag').innerHTML += '<br/>'+initial;
window.setTimeout(function(){countdown(limit,--initial,period);},period);
}
};

上面的代码确实有效,但我最初编写它的方式是使用这一行:

window.setTimeout(function(){countdown(limit,--initial,period);},period);

喜欢这个:

window.setTimeout(countdown(limit,--initial,period),period);

不起作用。为什么必须将函数 countdown() 包装在 function(){} 中?这是最好的方法吗?为什么我原来尝试的方法不起作用?

谢谢!

最佳答案

这是最好的方法。 window.setTimeout 期望一个函数作为其第一个参数。

window.setTimeout(function(){countdown(limit,--initial,period);},period);

正在将匿名函数作为第一个参数传递给 setTimeout。

window.setTimeout(countdown(limit,--initial,period),period);

将执行函数倒计时的结果作为第一个参数传递给setTimeout。在您的情况下,倒计时的结果始终是未定义

为了进一步说明,您还可以向 window.setTimeout 传递一个函数,如下所示:

var myFunc = function(){countdown(limit,--initial,period);};
window.setTimeout(myFunc, period);

关于javascript - 将函数传递给方法时,为什么使用匿名函数容器而不只是原始函数可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20604129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com