Javascript 为什么我不能在settimeout/setinterval中多次调用参数为的函数

Javascript 为什么我不能在settimeout/setinterval中多次调用参数为的函数,javascript,Javascript,我试图调用setinterval函数中的一个函数,如下所示 function dosomething(variable) { console.log(variable); } setinterval(dosomething(variable), 2000) 上面的代码只运行一次,并在第二次setinterval调用后抛出错误 我知道我可以使用匿名函数来实现这一点,但为什么不这样做呢?您可以使用一个匿名函数来调用dosomething方法 setInterval(function(){dos

我试图调用setinterval函数中的一个函数,如下所示

function dosomething(variable) {
 console.log(variable);
}

setinterval(dosomething(variable), 2000)
上面的代码只运行一次,并在第二次setinterval调用后抛出错误


我知道我可以使用匿名函数来实现这一点,但为什么不这样做呢?

您可以使用一个匿名函数来调用
dosomething
方法

setInterval(function(){dosomething(variable)}, 2000)

在本例中,您正在调用
dosomething
,然后将其返回的值传递给
setInterval()

,您可以使用一个匿名函数来调用
dosomething
方法

setInterval(function(){dosomething(variable)}, 2000)
在本例中,您调用的是
dosomething
,然后将其返回的值传递给此行的
setInterval()

setinterval(dosomething(variable), 2000)

var x = dosomething(variable);
setinterval(x, 2000);
使用调试器时,您会注意到
x
未定义

所以你得到了

dosomething(variable);
setinterval(undefined, 2000);
因此,运行一次并立即离开此线路

setinterval(dosomething(variable), 2000)

var x = dosomething(variable);
setinterval(x, 2000);
使用调试器时,您会注意到
x
未定义

所以你得到了

dosomething(variable);
setinterval(undefined, 2000);

因此,直接运行一次

,因为在传递未定义的
时,
setInterval
(也请参见案例)接受对函数的引用,因为会立即调用
dosomething()
。有什么原因导致否决吗?因为
setInterval
(也请参见案例)在传递
undefined
时接受对函数的引用,因为会立即调用
dosomething()
。是否有否决投票的原因?