带函数和不带函数的 setTimeout 有什么区别?

  • 本文关键字:函数 区别 setTimeout javascript
  • 更新时间 :
  • 英文 :


如果我认为控制台.log是一个函数,那么遵循这两个有什么区别?

setTimeout(console.log('Test'), 1000);

setTimeout(function(){ console.log('Test'); } , 1000);

询问第二个呼叫的原因在 1 秒后正确,但第一个呼叫立即。

setTimeout的第一个参数需要一个函数。当您传入console.log('Test')时,它将首先评估console.log('Test'),并将结果传递到实际的超时过程中。在您的情况下,console.log('Test')实际上并没有返回函数,因此在评估console.log('Test')时,它会test打印到控制台,然后在 1 秒后,不执行任何操作(因为您没有向setTimeout函数传递任何内容。

在第二秒中,您实际上传递了一个函数,让它在 1 秒后执行,这给了你想要的结果。

你可以想象这个函数看起来像这样:

function setTimeout(functionToCall, timeToWait) {
// Some waiting procedure based on timeToWait
functionToCall();
}

免责声明这不是函数的实际外观。

在第一种情况下,JS会先调用console.log('Test'),并将结果undefined传递给setTimeout。这导致它立即被打印出来。在第二种情况下,整个函数被传递到setTimeout中,而不先求值。

最新更新