Javascript 为什么我必须在setTimeout中使用高阶函数作为第一个参数?

Javascript 为什么我必须在setTimeout中使用高阶函数作为第一个参数?,javascript,settimeout,throttling,debounce,Javascript,Settimeout,Throttling,Debounce,我有以下代码: HTML: 在这一行: timeoutId = setTimeout(() => { fn(...args) }, delay) 我曾尝试直接将fn(…args)传入,如下所示: timeoutId = setTimeout(fn(...args), delay) 但这不起作用。为什么我们需要一个高阶函数在这里返回内部函数?实际上,您不需要在另一个匿名函数中结束函数调用。您可以使用以下语法:- timeoutId = setTimeout(f

我有以下代码:

HTML:

在这一行:

timeoutId = setTimeout(() => {
        fn(...args)
      }, delay)
我曾尝试直接将
fn(…args)
传入,如下所示:

timeoutId = setTimeout(fn(...args), delay)

但这不起作用。为什么我们需要一个高阶函数在这里返回内部函数?

实际上,您不需要在另一个匿名函数中结束函数调用。您可以使用以下语法:-

timeoutId = setTimeout(func, delay,...args);
而且这不是一个高阶函数。高阶函数可以接受函数作为参数,也可以返回函数,或者两者兼而有之。您可以说
setTimeout
是一个高阶函数


有关此语法的详细信息,请查阅-

,因为它是回调。将在超时后执行的函数。当您调用函数(如
fn(…args)
时,您迫切需要强制求值,因此设置超时没有意义,因为函数已在该点运行。它不是高阶函数,不会返回内部函数。它只调用
fn
。。。a是一个返回函数的函数,而作为另一个函数的参数的函数称为citizen。Lakshya Thakur已经澄清了其他一切。
timeoutId = setTimeout(fn(...args), delay)
timeoutId = setTimeout(func, delay,...args);