Javascript 这些代码之间的区别是什么?

Javascript 这些代码之间的区别是什么?,javascript,loops,settimeout,setinterval,Javascript,Loops,Settimeout,Setinterval,以下两者之间的区别是什么: k = setInterval(function(){loop();},100); 及 为什么第二个会像setTimeout()函数一样运行一次,而第一个会每隔1/10秒运行一次 在第二个循环中,您实际上是在调用setInterval之前执行loop,因此您将循环的结果传递给setInterval 更相似的是 k = setInterval(function(){loop();},100); k = setInterval(loop,100); 第一个示例允许您

以下两者之间的区别是什么:

k = setInterval(function(){loop();},100);


为什么第二个会像setTimeout()函数一样运行一次,而第一个会每隔1/10秒运行一次

在第二个循环中,您实际上是在调用
setInterval
之前执行
loop
,因此您将
循环的结果传递给
setInterval

更相似的是

k = setInterval(function(){loop();},100);

k = setInterval(loop,100);

第一个示例允许您在调用循环之前做一些工作,并在必要时传递一些参数

第二个需要一个函数对象作为第一个参数,并且不能在括号内传递任何内容


第一个模式比第二个模式(有点过时)传播得更广。

让我们看看JS是如何运行这段代码的:

第一道-

JS见setInterval-它应该有2个参数和计时器-在第一个变体中,everythink很简单-您传递了一个函数,在每个间隔和计时器上调用


让我们检查第二个变量-再次设置间隔,2个参数。但这一次,您没有将链接传递给函数,而是调用了
函数,该函数的结果将传递给setInterval。正如您调用的函数-它只运行一次,因为它不返回函数setInterval不能运行任何东西。

看起来像
setInterval(循环,100)
将是正确的写入方式当您拥有
foo(bar())
时,首先执行
bar
,并将其返回值传递给
foo
。参数总是先求值。不要因为
setTimeout
接受函数而感到困惑。这与参数的计算方式无关。你说的过时是什么意思?第二个不正确。我认为您把它与
setInterval('loop()',100)
混淆了,这是正确的,但不必要的。此答案具有误导性。请参阅-语法部分。第一个参数必须是函数对象或代码,而不是作为函数计算的参数。所以'loop()'等于eval('loop()'),这将导致一个匿名函数,该函数将调用loop函数,或者如果它不存在,将抛出一个错误。因此,您正在确认@elclanrs刚才所说的。将
setInterval(loop(),100)
(无引号)与
setInterval('loop()',100)
(带引号)混淆。
k = setInterval(function(){loop();},100);

k = setInterval(loop,100);